//服务器端代码
import java.io.*;
import java.net.Socket;
import java.net.ServerSocket;
import java.net.SocketException;
public
class ServerTest{
  
public
static
void main(String[] args){
    
try{
      ServerSocket s =
new ServerSocket(8888);
      Socket s1 = s.accept();
//s1是服务器和客户端共有的
    
      OutputStream os = s1.getOutputStream();
      DataOutputStream dos =
new DataOutputStream(os);
    
      InputStream is = s1.getInputStream();
      DataInputStream dis =
new DataInputStream(is);
    
      InputStreamReader isr =
new InputStreamReader(System.in);
      BufferedReader br =
new BufferedReader(isr);
      String info;
      
while(
true){
        info = dis.readUTF();
        System.out.println(
"客户说:"+ info);
        
if(info.equals(
"bye")){
          
break;
        }
        System.out.print(
"服务器说:");
        info = br.readLine();
        dos.writeUTF(info);
        
if(info.equals(
"bye")){
          
break;
      }
    }
    dis.close();
    dos.close();
    s1.close();
    s.close();
  }
  
catch(SocketException e){
    System.out.println(
"网络不正常,退出");
  }
  
catch(IOException e){
    e.printStackTrace();
  }
}
}
//客户端代码
import java.io.*;
import java.net.Socket;
import java.net.ServerSocket;
import java.net.SocketException;
public
class ClientTest{
  
public
static
void main(String[] args){
    
try{
      Socket s1 =
new Socket(
"localhost",8888);
    
      InputStream is = s1.getInputStream();
      DataInputStream dis =
new DataInputStream(is);
    
      OutputStream os = s1.getOutputStream();
      DataOutputStream dos =
new DataOutputStream(os);
    
      InputStreamReader isr =
new InputStreamReader(System.in);
      BufferedReader br =
new BufferedReader(isr);
    
      String info;
      
while(
true){
        System.out.print(
"客户说:");
        info = br.readLine();
        dos.writeUTF(info);
        
if(info.equals(
"bye")){
          
break;
        }
        info = dis.readUTF();
        System.out.println(
"服务器说:"+info);
        
        
if(info.equals(
"bye")){
          
break;
        }
      }
      dis.close();
      dos.close();
      s1.close();
    }
    
catch(SocketException e){
      System.out.println(
"网络不正常,退出");
    }  
    
catch(IOException e){
      e.printStackTrace();
    }
    }
  }
先在控制台运行服务器程序, 然后在另一个控制台中运行客户端程序
先从客户端发送消息, 一人发送一句.