多线程之简单TCP应用

本文介绍了如何在多线程环境下实现简单的TCP应用程序。通过创建多个线程,每个线程负责处理一个TCP连接,从而实现并发处理多个客户端请求。内容涵盖了线程同步、套接字编程以及TCP连接的建立与关闭等关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多线程之简单TCP应用

/*
使用TCP协议发送数据
	创建发送端Socket对象(创建连接)
	获取输出流对象
	发送数据
	释放资源
 */
public class ClientDemo {
	public static void main(String[] args) throws IOException {
		System.out.println("Client");
		//创建发送端Socket对象(创建连接)
		Socket s = new Socket(InetAddress.getByName("127.0.0.1"),10086);
		//创建线程对象
		ClientThreadSend sent = new ClientThreadSend(s);
		ClientThreadReceive receive = new ClientThreadReceive(s);
		Thread t1 = new Thread(sent,"ClientSent");			
		Thread t2 = new Thread(receive,"ClientReceive");
		//启动线程
		t1.start();
		t2.start();
	}
}
/*
使用TCP协议接收数据
	创建接收端Socket对象
	监听(阻塞)
	获取输入流对象
	获取数据
	输出数据
	释放资源
 */
public class ServerDemo {
	public static void main(String[] args) throws IOException  {
		System.out.println("Server");
		//创建接收端Socket对象
		ServerSocket ss = new ServerSocket(10086);
		监听(阻塞)
		Socket s = ss.accept();
		//创建线程对象
		ServerThreadSend sent = new ServerThreadSend(ss, s);
		ServerThreadReceive receive = new ServerThreadReceive(ss, s);
		Thread t1 = new Thread(sent,"ServerSent");
		Thread t2 = new Thread(receive,"ServerReceive");
		//启动线程
		t1.start();
		t2.start();
	}
}
public class ClientThreadSend implements Runnable {
	Socket s;
	public ClientThreadSend(Socket s){
		this.s = s;
	}
	@Override
	public void run() {
		while (true) {
			try {
				send(s);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public synchronized void send(Socket s) throws IOException{
		//获取输出流对象
		OutputStream os = s.getOutputStream();
		//定义数据源
//		System.out.print("client:");
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String line = null;
		line = br.readLine();
		//发送数据
		os.write(line.getBytes());
	}
}
public class ClientThreadReceive implements Runnable {
	Socket s;
	public ClientThreadReceive(Socket s){
		this.s = s;
	}
	@Override
	public void run() {
		while (true) {
			try {
				receive(s);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
		}
	}
	public synchronized void receive(Socket s) throws IOException{
		//获取输入流对象
		InputStream is = s.getInputStream();
		byte[] bys = new byte[1024];
		int len;//用于存储读取到的字节个数
		//接收数据
		len = is.read(bys);
		//输出数据
		System.out.print("server say:");
		System.out.println(new String(bys,0,len));
	}
}
public class ServerThreadReceive  implements Runnable {
	private ServerSocket ss;
	private Socket s;
	public ServerThreadReceive(ServerSocket ss,Socket s){
		this.ss = ss;
		this.s = s;
	}
	@Override
	public void run(){
		while (true) {
			try {
				receive(s);
			} catch (IOException e) {
				e.printStackTrace();
			} 
		}
	}
	public synchronized void receive(Socket s) throws IOException{
		//获取输入流对象
		InputStream is = s.getInputStream();
		//获取数据
		byte[] bys = new byte[1024];
		int len;//用于存储读取到的字节个数
		len = is.read(bys);
		String str = new String(bys,0,len);
		System.out.print("client say:");
		//输出数据
		System.out.println(str);	
	}
}
public class ServerThreadSend  implements Runnable {
	private ServerSocket ss;
	private Socket s;
	public ServerThreadSend(ServerSocket ss,Socket s){
		this.ss = ss;
		this.s = s;
	}
	@Override
	public void run(){
		while (true) {
			try {
				send(s);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	public synchronized void send(Socket s) throws IOException{
		//获取输出流对象
		OutputStream os = s.getOutputStream();
		//定义数据源
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String line = null;
		line = br.readLine();
		//发送数据
		os.write(line.getBytes());
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值