java中tcp多人对话的一个tcp例子

来源:互联网 发布:台湾有希望统一 知乎 编辑:程序博客网 时间:2024/05/19 04:28

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class MultipartCommunicationTcpTest implements Runnable{
 
 private Socket socket  = null;
 private ServerSocket serverSocket = null;
 public static void main(String[] args) {
  MultipartCommunicationTcpTest communicationTcpTest = new MultipartCommunicationTcpTest();
  communicationTcpTest.communicate();
  
 }
  public void communicate()
  {
   try {
    serverSocket = new ServerSocket(8001);
    while(true)
    {
     //这是与一个客户端开启连接,这里不断的循环,表示可以与很多个客户端连接
     socket = serverSocket.accept();
     //与每个客户端连接的回话都是在一个单独的线程中进行,如果不是在一个单独的线程进行,如果有一个与客户端的回话中断,
     //那么其他人就不能进行回话了,因为只有一个线程
     new Thread(this).start();
    }
   } catch (Exception e) {
    if(socket.isClosed())
    {
     
    }else
    {
     e.printStackTrace();
    }
   }
  }
 public void run() {
 
  try {
   BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
   //第二个参数表示当我们用println打印数据的时候,就会自动调用flush这个方法,如果设置为false,就算是用println也不会自动刷新,默认是false
   PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
   //这里的循环表示与一个客户端进行不断的来回通信
   while(true)
   {
    String receiveStr = br.readLine();
    //当输入的是quit的时候,就结束这个回话
    if(receiveStr.equals("quit"))
    {
     br.close();
     printWriter.close();
     socket.close();
     
     break;
    }
    System.out.println(receiveStr);
    printWriter.println(receiveStr + "------>" + new StringBuffer(receiveStr).reverse());
   }
  } catch (Exception e) {
   if(socket.isClosed())
   {
    
   }else
   {
    e.printStackTrace();
   }
  }
  
  
 }
}

原创粉丝点击