【问题标题】:Java socket sends only one messageJava socket 只发送一条消息
【发布时间】:2017-02-08 12:15:14
【问题描述】:

我已经用 Java 制作了一个套接字。
此套接字与服务器连接。

当我启动我的程序时,服务器会发送一条消息,说明我的套接字已与 AEOS 连接。 当我尝试登录服务器发送一些命令时,服务器再次响应:status connected to AEOS version

这不是我期望的消息,通常我的服务器必须发送“响应为真”。

你能帮帮我吗?

谢谢。

import java.io.*;
import java.net.*;

class TCPClient {
    public static void main(String argv[]) throws Exception {
        while(true) {
            String sentence;            
            String modifiedSentence;    

            Socket clientSocket = new Socket("127.0.0.1", 1201);

            BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
            DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());        
            BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

            sentence = inFromUser.readLine();
            outToServer.writeBytes(sentence + '\n');
            modifiedSentence = inFromServer.readLine();
            System.out.println("FROM SERVER: " + modifiedSentence);

            clientSocket.close();
        }
    }
}

output socket

【问题讨论】:

  • 请不要发布控制台输出的截图。您应该复制文本并将其粘贴到代码块中,edit提出您的问题。

标签: java sockets server message


【解决方案1】:

您为什么不尝试读取服务器发送的所有内容?另外,每次都需要打开一个新的Socket吗?取决于您的实施。试试这个:

public static void main(String[] args) {

        Socket clientSocket = null;

        try {
            clientSocket = new Socket("127.0.0.1", 1201);

            BufferedReader inFromUser = new BufferedReader(
                    new InputStreamReader(System.in));
            DataOutputStream outToServer = new DataOutputStream(
                    clientSocket.getOutputStream());
            BufferedReader inFromServer = new BufferedReader(
                    new InputStreamReader(clientSocket.getInputStream()));

            String initialMessageFromServer = null;

            while ((initialMessageFromServer = inFromServer
                    .readLine()) != null) {
                System.out.println(initialMessageFromServer);
            }

            while (true) {
                String sentence = inFromUser.readLine();
                outToServer.writeBytes(sentence + '\n');

                StringBuilder modifiedSentence = new StringBuilder();
                String responseFromServer = null;

                while ((responseFromServer = inFromServer.readLine()) != null) {
                    modifiedSentence.append(responseFromServer);
                    modifiedSentence.append('\n');
                }

                System.out
                        .println("FROM SERVER: " + modifiedSentence.toString());
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (clientSocket != null) {
                try {
                    clientSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

【讨论】:

  • 感谢您的快速响应。我已经尝试了代码,但现在他连接了服务器,但是当我发送命令时,没有发生..通常在与服务器连接后,我必须输入我的登录名和密码。当我输入带有文本的服务器响应时。这不会发生..
猜你喜欢
  • 2016-11-12
  • 2019-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多