Java客户端-服务器不重复响应

标签 java sockets client-server

//编辑 13:25 客户端控制台

Connect to server<br />
Repsonded: Tue May 22 13:23:28 CEST 2012<br />
Disconnect to server<br />
Connect to server<br />
Not run: java.net.SocketException: Software caused connection abort: recv failed<br />
Disconnect to server<br />
Connect to server<br />
Not run: java.net.SocketException: Software caused connection abort: recv failed<br />
Disconnect to server<br />
Connect to server<br />
Repsonded: Tue May 22 13:23:38 CEST 2012<br />
Disconnect to server<br />
Connect to server<br />
Not run: java.net.SocketException: Software caused connection abort: recv failed<br />
Disconnect to server<br />
Connect to server<br />
Not run: java.net.SocketException: Software caused connection abort: recv failed<br />
Disconnect to server<br />
Connect to server<br />
Not run: java.net.SocketException: Software caused connection abort: recv failed<br />
Disconnect to server<br />
Connect to server<br />
Not run: java.net.SocketException: Software caused connection abort: recv failed<br />
Disconnect to server<br />
Connect to server<br />
Not run: java.net.SocketException: Software caused connection abort: recv failed<br />
Disconnect to server<br />
Connect to server<br />
Not run: java.net.SocketException: Software caused connection abort: recv failed<br />
Disconnect to server<br />
Connect to server<br />
Not run: java.net.SocketException: Software caused connection abort: recv failed<br />
Disconnect to server<br />
Connect to server<br />
Not run: java.net.SocketException: Software caused connection abort: recv failed<br />
Disconnect to server<br />
Connect to server<br />
Not run: java.net.SocketException: Software caused connection abort: recv failed<br />
Disconnect to server<br />
Connect to server<br />
Not run: java.net.SocketException: Software caused connection abort: recv failed<br />
Disconnect to server<br />

服务器控制台

Server Initialized<br />
111111<br />
111111<br />
111111<br />
111111<br />
111111<br />
111111<br />
111111<br />
111111<br />
111111<br />
111111<br />
111111<br />
Error(run): java.net.SocketException: Connection reset by peer: socket write error<br />


Server load data and not return repead "Repsonded: Tue May 22 13:23:38 CEST 2012" or client not ouput print.

最佳答案

问题出在您的服务器实现上。您没有在 run 语句中循环,检查来自该连接的新传入消息。您读取一次信息,然后在finally语句中关闭连接:

 @Override
    public void run() {

        try {

            BufferedInputStream is = new BufferedInputStream(connection.getInputStream());
            InputStreamReader isr = new InputStreamReader(is);
            ...
        finally {
            try {
                connection.close();

当然,您的服务器有一个循环检查传入的连接请求,因此如果客户端在发送每条消息后尝试再次连接到服务器,那么这将起作用,但您的客户端仅发送一个请求(在主消息的开头)陈述)。

所以,我建议你做什么: 服务器端,在 run 语句中设置流等,设置完毕后使用 while(true) 进入无限循环,并在该循环中让服务器从输入流读取,如果read()不返回null,则打印消息。这将导致服务器检查来自该客户端的传入数据,一旦您得到一个不为空的字符串,它将打印它(如果您愿意,还可以触发响应)。

客户端也是如此,您需要一个循环来监听来自服务器的传入消息

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

相关文章:

Java 服务包装器和附加的应用程序命令行参数

java - 在枚举中实现 Runnable

java - synchronized 的锁定对象是不是错了?

linux - 为什么创建的 socketchannels 可以超过 max open files?

c# - 在UWP 应用程序中,我可以在建立连接后获取SSL 证书错误列表吗?

java - 通过网络发送带有换行符的文本

java - 如何在Android操作系统的手机上检索相机拍摄的照片?

c - C 中从 int 到 const char* [fpermissive] 的错误无效转换

c++ - 如何在 C++ 套接字程序中检查已连接客户端的可用性

c# - 使用 WCF 和 Entity Framework 的客户端服务器