import java.net.*;
import java.io.*;
public class TestServer { //服务器端
public static void main(String[] args) {
try{

ServerSocket ss = new ServerSocket(6666);
Socket s = ss.accept();   
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedWriter bw= new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Client:" + br.readLine());
String str2 = br1.readLine();
while(!str2.equalsIgnoreCase("bye")){
bw.write(str2);
bw.flush();
//System.out.println("Server:" + str2);
System.out.println("Client:" + br.readLine());
str2 = br1.readLine();
}
br.close();
br1.close();
bw.close();
s.close();
ss.close();
}catch(IOException e){e.printStackTrace();}
}

}
import java.net.*;
import java.io.*;
public class TestClient{ //客服端
public static void main(String[] args) {
try{
    Socket s = new Socket("127.0.0.1",6666);
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedWriter bw= new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
 
String str = br1.readLine();    
while(!str.equalsIgnoreCase("bye")){
bw.write(str);
bw.flush();
//System.out.println("Client:" + str);
System.out.println("Server:" + br.readLine());
str = br1.readLine();
}

br.close();
br1.close();
bw.close();
s.close();
}catch(IOException e){e.printStackTrace();}

}
}

解决方案 »

  1.   

    大家请使用cmd测试(cmd下,请去掉代码中的包名),cmd下编译好后,cmd先启动server。再起一个cmd用于启动client。
    //服务端:package com.expert58.socket; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket; public class ServerSocketDemo {        ServerSocket ss;    Socket socket;    BufferedReader in;    PrintWriter out;        public ServerSocketDemo(){       try {           ss=new ServerSocket(9999);           while(true){              socket=ss.accept();              String RemoteIP=socket.getInetAddress().getHostAddress();              String RemotePort=":"+socket.getLocalPort();              System.out.println("A client come in IP:"+RemoteIP+RemotePort);                            in=new BufferedReader(new InputStreamReader(socket.getInputStream()));              String line=in.readLine();              System.out.println("client send is:"+line);                            out=new PrintWriter(socket.getOutputStream(),true);              out.println("Your message received!");                            out.close();              in.close();              socket.close();           }       } catch (IOException e) {           e.printStackTrace();       }    }     public static void main(String[] args) {       new ServerSocketDemo();    } }  //客户端:package com.expert58.socket; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException; public class ClientSocketDemo {     Socket socket;    BufferedReader in;    PrintWriter out;        public ClientSocketDemo(){       System.out.println("Try to connect to server:9999");       try {           socket=new Socket("127.0.0.1",9999);           System.out.println("Server connected!");           System.out.println("Please enter some character:");           BufferedReader line=new BufferedReader(new InputStreamReader(System.in));           out=new PrintWriter(socket.getOutputStream(),true);           out.println(line.readLine());                      in=new BufferedReader(new InputStreamReader(socket.getInputStream()));           System.out.println(in.readLine());                      out.close();           in.close();           socket.close();       } catch (UnknownHostException e) {           e.printStackTrace();       } catch (IOException e) {           e.printStackTrace();       }    }        public static void main(String[] args) {       new ClientSocketDemo();    } }
      

  2.   

    这样改改就好了,bw.write()写入字符串不带换行符'\n',br1.readLine()需要读入一行字符必须以换行符'\n'结尾,如果没有换行符'\n',br1.readLine()迟迟不能获取一行数据,一直等待。
    import java.net.*;
    import java.io.*;
    public class TestServer { //服务器端
    public static void main(String[] args) {
    try{ ServerSocket ss = new ServerSocket(9999); 
    Socket s = ss.accept(); 
    BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
    BufferedWriter bw= new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
    BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Client:" + br.readLine());
    String str2 = br1.readLine();
    while(!str2.equalsIgnoreCase("bye")){
    bw.write(str2+"\n");
    bw.flush();
    //System.out.println("Server:" + str2); 
    System.out.println("Client:" + br.readLine());
    str2 = br1.readLine();
    }
    br.close();
    br1.close();
    bw.close();
    s.close();
    ss.close();
    }catch(IOException e){
    e.printStackTrace();}
    }
    }
    import java.net.*;
    import java.io.*;
    public class TestClient{ //客服端
    public static void main(String[] args) {
    try{
    Socket s = new Socket("127.0.0.1",9999);
    BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
    BufferedWriter bw= new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
    BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));

    String str = br1.readLine();   
    while(!str.equalsIgnoreCase("bye")){
    bw.write(str+"\n");
    bw.flush();
    //System.out.println("Client:" + str);
    System.out.println("Server:" + br.readLine()); 
    str = br1.readLine();
    }

    br.close();
    br1.close();
    bw.close();
    s.close();
    }catch(IOException e){
    e.printStackTrace();
    }

    }
    }
      

  3.   

    我这里有个UDP 接收消息端的, 但是调不对, 路过高手顺便看看
    public class UDPReceive {
          private DatagramSocket socket;
          private DatagramPacket packet;
          private  int port;
          private boolean flag = true;
          
          public UDPReceive(int port){
           this.port = port;
         System.out.println("init port is  "+port);
          }   
          
          public void stopReceive(){
           flag= false;
           socket.close();
          }
          
          public String receiveMessage(){
           System.out.println("this is UDPReceiver");
           String msg ="15556";
           try {
           System.out.println("socket port 1  ? " +port);   
    socket = new DatagramSocket(3602,InetAddress.getLocalHost());

    System.out.println("receive adress "+socket.getInetAddress());  
    System.out.println("try socket");
    byte[] buffer = new byte[500];
           packet = new DatagramPacket(buffer, buffer.length);
           System.out.println("try packet");
           //循环接收 数据 
          // while(true){
           System.out.println("isbind ? " +socket.isBound());
           System.out.println("socket port 2 ? " +socket.getPort()); 
           socket.receive(packet);
           System.out.println("try receive");
           msg = new String(buffer, 0, packet.getLength());
           System.out.println("msg  "+msg);
           System.out.println("reveive message ");
        //   }       
    } catch (SocketException e) {
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
           return msg;
          }
    }
    输出的时候
    init port is  3602
    this is UDPReceiver
    socket port 1  ? 3602
    receive adress null
    try socket
    try packet
    isbind ? true
    socket port 2 ? -1