2013-08-23 82 views
0

这是我从未想到的问题。我问过很多人,他们甚至都不知道。无论如何,让我们来解决这个问题。这就是我试图做的......创建一个客户端和一个服务器。客户端连接到服务器,并每3分钟发送一条消息(我减少了测试时间)。必须有两个独立的线程(一个用于客户端和服务器)。但是我发现了,客户端将继续发送邮件,但该服务器将在端口1234服务器套接字断开并停止监听

客户不再听:

import java.io.PrintWriter; 
import java.net.Socket; 


public class Client { 

     public Client(){ 
       startClient(); 
     } 

     public void startClient(){ 
       new Thread(new Runnable(){ 
         @Override 
         public synchronized void run(){ 
           try{ 
             Socket sendChat = new Socket("localhost", 1234); 
             PrintWriter writer = new  PrintWriter(sendChat.getOutputStream()); 

           while(true){ 
             Thread.sleep(1000); // normally 180000 

             writer.println("Hello Server!"); 
           } 
           }catch(Exception err){ 
             err.printStackTrace(); 
           } 
         } 
       }).start(); 
     } 

} 

服务器:

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.Date; 


public class Server { 

public Server(){ 
     startServer(); 
} 

    public void startServer(){ 
      new Thread(new Runnable(){ 
        @Override 
        public synchronized void run(){ 
          try{ 
            @SuppressWarnings("resource") 
            ServerSocket server = new ServerSocket(1234); 

            while(true){ 
              final Socket test = server.accept(); 
              BufferedReader reader = new BufferedReader(new InputStreamReader(test.getInputStream())); 

              while(!test.isClosed()) { 
                Date date = new Date(); 

                System.out.println("Server got message from client " + date); 
              } 
              reader.close(); 
            } 
          }catch(Exception err){ 
            err.printStackTrace(); 
          } 
        } 
      }).start(); 
    } 

} 

开始:

public class Start { 
    public static void main(String[] args){ 
     new Server(); 
     new Client(); 
    } 
} 

我将不胜感激,如果有人能告诉我什么是错的,因为我老实说没有clu即

+1

因此... *当服务器停止收听时*有没有错误信息? –

+0

@Emest跑步时没有例外。这正是发生的情况。服务器和客户端对象被创建。客户端发送消息,服务器响应。客户端发送另一条消息,服务器不响应。 – Jaccob

回答

0

请在Server类的while循环中写下两行以下的代码,它对您有用。

final Socket test = server.accept(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(test.getInputStream())); 

正在发生的事情在你的代码:服务器将while循环结束后,每一次等待新的客户端,但没有客户端,将要与该实例的服务器连接。因此,服务器将等待直到新的客户端到来,服务器将接受该新客户端并继续处理。

+0

这很有趣。我不知道它会这样做。谢谢! – Jaccob

+0

即时通讯在C#中有这个相同的问题,这种方法也会起作用 – shawn

0

你在一个循环中堆栈,试着在消息后关闭客户端的连接。