gpt4 book ai didi

Java:客户端套接字不读取第二行并在终止符行之后保持打开状态

转载 作者:行者123 更新时间:2023-12-02 02:47:56 25 4
gpt4 key购买 nike

在网上阅读了数十个示例后,我仍然遇到这个问题。

我正在从 Java 客户端向 C++ 服务器发送消息。服务器收到握手消息后,返回如下数据:

“0000:1111:2222:3333:4444

END_CONNECT_DATA”

客户端读取最后一行(终止符)后,应立即关闭连接。

我就是这样做的:

    Socket socket = null;

String terminator = "END_CONNECT_DATA";

try
{
int serverPort = 7767;
String ip = "192.168.1.10";
String messageOut = "HAND-SHAKE MESSAGE";

socket = new Socket(ip, serverPort);

DataInputStream input = new DataInputStream( socket.getInputStream());
DataOutputStream output = new DataOutputStream( socket.getOutputStream());

//Send message
output.writeBytes(messageOut);

//Read Response
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

StringBuffer sb = new StringBuffer();
String s = "";

while((s = br.readLine()) != null)
{
System.out.println("CHECK !!!");
System.out.println(s);
sb.append(s);

if(s.contains(terminator))
{
System.out.println("CHECK TERMINATOR");
break;
}
}

socket.close();

String data = sb.toString();

System.out.println("FULL DATA:\n");
System.out.println(data);
}

catch (UnknownHostException e)
{
System.out.println("Sock:"+e.getMessage());
}

catch (EOFException e)
{
System.out.println("EOF:"+e.getMessage());
}

catch (IOException e)
{
System.out.println("IO:"+e.getMessage());
}

finally
{
if(socket!=null)
{
try
{
socket.close();

}
catch (IOException e)
{

}
}
}
}

我从服务器返回的只是第一行。光标转到下一行并继续闪烁。套接字连接未关闭。看起来客户端根本没有读取终止符(消息的第二行)。

有什么想法吗?

非常感谢!

最佳答案

documented ,循环无法读取第二行,因为它没有以 \r\n 终止。因此,仅返回到目前为止的结果,即所描述的第一行。

您需要在终止符后面添加 \r\n 或使用 BufferedReader.read() 代替并手动检查或采用其他策略读取消息

关于Java:客户端套接字不读取第二行并在终止符行之后保持打开状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44319652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com