服务器端并没有等到客户端的连接!将服务器端的
Socket socket = srv.accept();
改成:
Socket socket = null;
while(true){
  socket = srv.accept();
  if(socket=!null)
    break;
}
//do some thing here

解决方案 »

  1.   

    wr.write("123")---> wr.write("123\r");
      

  2.   

    服务器端://Server.java
    import java.net.*;
    import java.io.*;public class Server
    {
    public static void main(String args[])
    {
    try {
             int port = 4000;
             ServerSocket srv = new ServerSocket(port);
            
             System.out.println("开始监听");
        
             Socket socket = srv.accept();
            
             BufferedReader rd = 
                new BufferedReader(new InputStreamReader(socket.getInputStream()));
        
             String str;
             while ((str = rd.readLine()) != null) {
               
                 System.out.println(str);
             }
             rd.close();
            
             socket.close();
            
             srv.close();
            
            
         } catch (IOException e) {
         System.out.println(e);
         } }
    }客户端://Client.java
    import java.net.*;
    import java.io.*;public class Client
    {
       public static void main(String args[])
       {
           try {
           InetAddress addr = InetAddress.getByName("localhost");
           int port = 4000;
           SocketAddress sockaddr = new InetSocketAddress(addr, port);   
           System.out.println(addr.toString());
           Socket sock = new Socket();
           int timeoutMs = 5000;   
           sock.connect(sockaddr, timeoutMs);       BufferedWriter wr = 
              new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
           wr.write("123");
           // newLine()是为了输出换行符,因为服务器端用的是readLine().
           // 单纯的写成wr.write("\r");或wr.write("\n");都不好,
           // 不同操作系统的换行符是不一样的。
           wr.newLine();
           wr.flush();
           
           //等待2秒,是为了等服务器端接收到数据,再关闭客户端连接
           //否则,服务器端还没有收到数据,客户端就已经把连接关闭了
           Thread.sleep(2000);
     
           } catch (UnknownHostException e) {
                   System.out.println(e);
           } catch (SocketTimeoutException e) {
                   System.out.println(e);
           } catch (IOException e) {
                   System.out.println(e);
           }catch (InterruptedException e) {
                   System.out.println(e);
           }    }
    }============================另外:最好不要用BufferedReader和BufferedWriter来读取socket数据,因为他们读取到的数据都是经过编码解码的数据,不是原始数据。一般socket编程都用InputStream和OutputStream来读取数据,这样可以读取到最原始的数据,而不是经过编码解码的数据。
      

  3.   

    对于服务器端的ServerSocket一定要开始.listen()然后才能.accept()。