[英]TCP Client/Server communication only sends first message?
我在java中设置一个简单的TCP客户端服务器交互。
服务器是用Java编写的桌面客户端:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
class TCPServer
{
public static int PORT_NUMBER = 6129;
public static void main(String argv[]) throws Exception
{
String clientMessage;
ServerSocket welcomeSocket = new ServerSocket(PORT_NUMBER);
while (true)
{
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
clientMessage = inFromClient.readLine();
System.out.println("Received: " + clientMessage);
outToClient.writeBytes("I received this: "+ clientMessage +"\n");
}
}
}
客户端是一个Android应用程序,通过TCP连接到服务器。 在客户端我有一个方法sendMessage(String msg)
,它尝试向服务器发送消息。
public static void sendMessage(String msg) throws IOException
{
if (mainSocket == null)
{
return;
}
if (!mainSocket.isConnected())
{
connectSocket();
}
PrintWriter output = new PrintWriter( mainSocket.getOutputStream());
output.println(msg);
output.flush();
System.out.println(msg);
}
问题是,服务器收到第一条消息,但任何后续消息都不会显示。 当我关闭客户端时,所有其他消息突然出现在服务器中。
这是服务器看到的:
Received: message 1
很长一段时间都没有活动......
然后我关闭了客户端
Received: message 2 message 3 message 4 message 5 etc..
我在sendMessage()方法中放了一个println,并且实时调用了方法本身。
每次发送消息时,您都需要在客户端显式close()
PrintWriter
。 当您完成读取inFromClient
时,在服务器端也是如此,并且当您完成写入outToClient
时再次。
另见这个基本示例 ,他们非常好地解释了基本工作流程:
但是,基础知识与此计划中的基本内容大致相同:
打开一个插座。
打开输入流并将输出流输出到套接字。
根据服务器协议读取和写入流。
关闭溪流。
关闭插座。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.