TCP中的多线程

java中的多线程见其他篇章,再这我就简述一些我对TCP中多线程的理解

上篇已提到TCP是一种可靠连接,需要客户端和服务端共同作用传输;
但实际中我们见的大部分都是一对多,即一个服务端,有多个客户端,甚至有多对多,多个服务端对多个客户端

对于TCP中的多线程,我今天就一对多情况的思路做以简单介绍,简而言之,就是当客户向服务端发送请求时,服务端用一个集合类来接收,并在线程同步中,根据需要进行传输数据,并且关闭长久时间不用的连接

代码简单如下:

//服务端

package TCP2;

import java.io.IOException;
import java.net.*;
import java.util.ArrayList;

public class Server {
    public static ArrayList<Socket>  sl=new ArrayList<Socket>();
    public static void main(String[] args) throws IOException{
            ServerSocket  ss=new ServerSocket(30000);
            while(true){
                Socket s=ss.accept();
                sl.add(s);
                new Thread(new ServerXain(s)).start();
            }
    }   
}




package TCP2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;


public class ServerXain implements Runnable {
    private Socket s=null;
    private BufferedReader br=null;
//Socket 传的输入流
    public ServerXain(Socket s) throws IOException{
        // TODO Auto-generated constructor stub
        this.s=s;
        br=new BufferedReader(new InputStreamReader(s.getInputStream()));
    }
public synchronized void  run() {
    // TODO Auto-generated method stub
    try {
        String content=null;
        while((content=readFromClient())!=null){
            for(Socket s:Server.sl){
            PrintStream ps=new PrintStream(s.getOutputStream());
            ps.println(content);
            }
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
private String readFromClient() {
    // TODO Auto-generated method stub
    try {
        return br.readLine();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        Server.sl.remove(s);
    }
    return null;
}






}
//客户端

package TCP2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

public class Client {
    public static void main(String[] args) throws IOException{
        Socket s=new Socket("127.0.0.1",30000);
        new Thread(new ClientXian(s)).start();
        PrintStream ps=new PrintStream(s.getOutputStream());
        String line=null;
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        while((line=br.readLine())!=null){
            ps.println(line);
        }

    }

}


package TCP2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class ClientXian implements Runnable{
    private Socket s=null;
    BufferedReader br=null;

    public ClientXian(Socket s) throws IOException{
        // TODO Auto-generated constructor stub
        this.s=s;
        br=new BufferedReader(new InputStreamReader(s.getInputStream()));
    }

    public synchronized void run() {
        // TODO Auto-generated method stub
        try {
            String content=null;
            while((content=br.readLine())!=null){
                System.out.println(content);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }



}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
多线程TCP连接是一种在Java实现的技术。它允许多个客户端同时连接到服务器,并在不同的线程处理每个客户端的请求。通过使用多线程,服务器可以同时处理多个客户端的请求,提高了系统的并发性能。 在Java,可以使用Socket类和ServerSocket类来实现多线程TCP连接。ServerSocket类用于创建服务器端的套接字,而Socket类用于创建客户端的套接字。当客户端连接到服务器时,服务器通过接受客户端的套接字来建立连接。然后,服务器可以为每个客户端创建一个新的线程来处理其请求。 以下是实现多线程TCP连接的一般步骤: 1. 创建ServerSocket对象,并指定服务器端口号。 2. 使用accept()方法等待客户端连接,并接受客户端的套接字。 3. 创建一个新的线程,并将接受到的套接字传递给该线程。 4. 在新线程,使用Socket对象来与客户端进行通信。可以使用InputStream和OutputStream来读取和写入数据。 5. 当客户端请求完成后,关闭套接字和线程。 通过使用多线程TCP连接,可以实现高效的网络通信,并提供更好的用户体验。同时,Java多线程机制也使得实现多线程TCP连接变得相对简单和方便。<span class="em">1</span> #### 引用[.reference_title] - *1* [TCP.rar_java Tcp _tcp java_tcp 多线程_tcp多线程](https://download.csdn.net/download/weixin_42650811/86660539)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值