Java TCP传输协议实现数据收发、多线程实现聊天室功能

本文介绍了使用Java进行TCP协议的数据发送和接收,包括创建Socket链接,指定IP地址和端口,写出及读取数据,以及如何通过多线程实现简单的聊天室功能。

发送数据:
1、创建Socket链接,需要ip地址和端口
2、写出数据
3、关闭连接

接收数据:
1、创建链接,并且需要端口号、
2、获取发送端的socket对象
3、接受数据
4、关闭连接

package TCP;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author Micsal
 * @date 2020年9月1日
 * @version :
 * @description: TCP的聊天室
 */
public class TCPConversion {

	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Runnable r1 = new Runnable() {// 发送
			@Override
			public void run() {
				// TODO Auto-generated method stub
				try {
					Socket so = new Socket(InetAddress.getByName("192.168.120.28"), 10004);
					OutputStream out = so.getOutputStream();// 字节输出流
					String str = null;
					System.out.print("发送:");
					while ((str = br.readLine()) != null) {
						out.write(str.getBytes("UTF-8"));// 写出数据
						if (str.equals("quit")) {
							break;
						}
						System.out.print("发送:");
					}
					so.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		};

		Runnable r2 = new Runnable() {// 接收
			@Override
			public void run() {
				// TODO Auto-generated method stub
				try {
					ServerSocket ss = new ServerSocket(10004);// 创建接收链接
					Socket so = ss.accept(); // 侦听要连接到此套接字并接受它。
					while (true) {
						InputStream in = so.getInputStream();// 获取输入流:实际上就是数据
						byte[] buf = new byte[1024];
						int len = in.read(buf);// 得到内容
						String ip = so.getInetAddress().getHostAddress();
						String msg = new String(buf, 0, len);
						System.out.println(ip + ": " + msg);
						if (msg.equals("quit")) {
							break;
						}
					}
					ss.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		};

		ExecutorService es = Executors.newFixedThreadPool(2);
		es.submit(r2);
		es.submit(r1);
	}// main
}// class

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值