Почему он возвращает нулевое значение? (Сеть) - PullRequest
0 голосов
/ 13 января 2010

Это два класса, один из которых находится в моем клиентском приложении, а другой - в серверном приложении.

мой класс MainServer:

public class MainServer {

static Socket client = null;
static ServerSocket server = null;
static BufferedReader in;
static PrintWriter out;
static String line;

public static void main() {
    System.out.println("Server is starting...");
    System.out.println("Server is listening...");

    try {
        server = new ServerSocket(5050);
    } catch (IOException ex) {
        System.out.println("Could not listen on port 5050");
        System.exit(-1);

    }
    try {
        client = server.accept();
        System.out.println("Client Connected...");
    } catch (IOException e) {
        System.out.println("Accept failed: 5050");
        System.exit(-1);
    }

    try {
        in = new BufferedReader(new InputStreamReader(
                client.getInputStream()));
        out = new PrintWriter(client.getOutputStream(),
                true);
    } catch (IOException e) {
        System.out.println("Read failed");
        System.exit(-1);
    }
    while (true) {
        try {
            line = in.readLine();
//Send data back to client
                out.println(line);
            } catch (IOException e) {
                System.out.println("Read failed");
                System.exit(-1);
        }
    }

}}

мой класс MainClient:

public class MainClient implements Runnable {

private static InformationClass info = new InformationClass();
private static Socket c;
private static String text;

public static String getText() {
    return text;
}

public static void setText(String text) {
    MainClient.text = text;
}
private static PrintWriter os;
private static BufferedReader is;
static boolean closed = false;

/**
 * @param args the command line arguments
 */
public static void runAClient() {
    try {
        c = new Socket("localhost", 5050);

        os = new PrintWriter(c.getOutputStream(), true);
        is = new BufferedReader(new InputStreamReader(c.getInputStream()));
        System.out.println(is);
        String teXt = getText();
        os.println(teXt);

        String line = is.readLine();
        System.out.println("Text received: " + line);




    } catch (UnknownHostException ex) {
        System.err.println("Don't know about host");

    } catch (Exception e) {
        System.err.println("IOException:  " + e);

    }

}

public void run() {
    String responseLine;

    try {
        while ((responseLine = is.readLine()) != null) {
            System.out.println(responseLine);
            if (responseLine.indexOf("*** Bye") != -1) {
                break;
            }
        }
        closed = true;
    } catch (IOException e) {
        System.err.println("IOException:  " + e);
    }

}}

когда я пишу в текстовой области клиента, а затем нажимаю кнопку «Отправить»: на консоли сервера эти строки будут написаны ==>

init:
deps-jar:
compile-single:
run-single:
Server is starting...
Server is listening...
Client Connected...
java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:168)
        at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
        at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
        at java.io.InputStreamReader.read(InputStreamReader.java:167)
        at java.io.BufferedReader.fill(BufferedReader.java:136)
        at java.io.BufferedReader.readLine(BufferedReader.java:299)
        at java.io.BufferedReader.readLine(BufferedReader.java:362)
        at ServerNetwork.MainServer.main(MainServer.java:67)
Java Result: -1
BUILD SUCCESSFUL (total time: 46 seconds)

и на клиентской консоли эти строки будут написаны ==>

init:
deps-jar:
compile-single:
run-single:
java.io.BufferedReader@18a7efd
Text received: null
BUILD SUCCESSFUL (total time: 41 seconds)

Я отредактировал свой пост. Пожалуйста, помогите мне! я новичок в сети [: - (]

РЕДАКТИРОВАТЬ: пожалуйста, начните читать с этой части: это два класса, один для графического интерфейса пользователя, а другой для клиента. (сеть) он ничего не возвращает на консоли для сервера, поэтому он ничего не возвращает клиенту. Пожалуйста, помогите мне спасибо. мой класс GUI: (часть этого) (например, фрейм чата, который, нажав на кнопку «Отправить». Я отправлю что-то для сервера)

мой класс графического интерфейса пользователя (чата), часть этого:

private void SendActionPerformed(java.awt.event.ActionEvent evt) {                                         
setButtonIsSelected(true);
submit();
clear();
} 
 private void submit() {




String text = jTextArea1.getText();


jTextArea2.append(client.getCurrentName() + " : " + text + "\n");
MainClient.setText(client.getCurrentName() + " : " + text + "\n");
}

private static boolean buttonIsSelected = false ;

public static boolean isButtonIsSelected() {
    return buttonIsSelected;
}

public static void setButtonIsSelected(boolean buttonIsSelected) {
    ChatFrame.buttonIsSelected = buttonIsSelected;
}

мой класс MainClient: (часть этого)

show a chat frame.

if ( ChatFrame.isButtonIsSelected() == true) {

        String teXt = getText();
        System.out.println(teXt);
        os.println(teXt);
        String line;
        line = is.readLine();
        System.out.println("Text received: " + line);

    }

сначала я буду запускать клиентский класс, поэтому будет запускаться класс gui с именем Chat Frame.

Ответы [ 2 ]

3 голосов
/ 13 января 2010

getText() возвращает ноль, поэтому вы записываете «ноль» на сервер. По крайней мере, это то, что я нашел после того, как изменил ваш достаточно, чтобы заставить его скомпилировать и запустить.

После изменения getText() для возврата "привет" я получил:

Сервер:

Server is starting...
Server is listening...
Client Connected...

Клиент:

java.io.BufferedReader@7d2152e6
Text received: hello

(строка "BufferedReader @ 7d ..." соответствует System.out.println(is);)

Обратите внимание, что после того, как клиент отключился, ваш сервер будет продолжать пытаться отправить ему "null", потому что вы не проверяете, чтобы line был нулевым в коде сервера.

0 голосов
/ 13 января 2010

Сервер закрывает соединение перед отправкой любых данных, поэтому клиент получает null (что означает «конец файла»).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...