Java客户端-服务器问题

标签 java sockets client-server

请看一下示例here .

希望能够保持连接 Activity 并向服务器发送多个客户端消息,我将代码更改为:

// Send the message to the server
OutputStream os = Client.socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
InputStream is = Client.socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);

for (int i = 0; i < 10; i++) {
    String sendMessage = i + "\n";
    bw.write(sendMessage);
    bw.flush();
    System.out.println("Message sent to the server : " + sendMessage);
    String message = br.readLine();
    System.out.println("Message received from the server : " + message);
}

我不明白为什么这只适用于第一条消息。

有人可以解释一下吗?

更新:

系统输出:

服务器端:

`Server Started and listening to the port 25000`
`Message received from client is 0`
`Message sent to the client is 0`

客户端:

`Message sent to the server : 0`
`Message received from the server : 0`
`Message sent to the server : 1`

最佳答案

我在发布的代码中看到的问题 link服务器不完全处理请求,它接受(客户端套接字连接)并读取此连接上可用的任何内容,然后等待更多客户端连接(接受),而您的客户端程序永远不会建立(这很好)。

它不会继续读取客户端的输入流(仅读取一次),因此第一个请求后发送到客户端的任何内容都会被丢弃。

在服务器端,一旦与客户端建立连接(接受),就会 fork 一个新线程并将关联的套接字传递给它。在此线程(例如请求处理程序)中,有一个围绕套接字输入流的循环

Server:

 Socket socket = serverSocket.accept()
 InputStream is = socket.getInputStream();
 InputStreamReader isr = new InputStreamReader(is);
 BufferedReader br = new BufferedReader(isr);
while(socket.isConnected() && !socket.isInputShutdown())
{
 String number = br.readLine(); //this would block until message arrives from client socket
 //further logic
 //write back to client etc
}

关于Java客户端-服务器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16734495/

相关文章:

c++ - 调试套接字 C++ 代码并帮助我理解

Java 服务器 - 多个客户端处理 - 使用线程是最佳选择吗?

java - 如何从 GWT 访问 SQL 数据库?

java - 为什么 Java/Apache HttpClient 使用与我的浏览器不同的(且已过期的)X509 根证书?

java - 泛型 - 编译器不一致 [jdk 1.8.0_162]

c - 使用 TCP/IP 通过网络发送可变大小的数据包

c++ - c++ unix 多线程套接字阻塞和非阻塞。什么是阻塞?

c# - 环回/本地主机问题

java - 如何使用 java servlet 从 mysql 数据库中检索图像并将其显示在 HTML img 标签中?

Eclipse 中的 Java 套接字编程