架构师

您现在的位置是:首页 > 技术博客 > 编程基础

编程基础

使用socket和多线程实现的简单聊天室功能

架构师小跟班 2019-09-03编程基础
先看一下效果:具体实现代码:package com.provy.Demo;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.DatagramPacket;import java.net.Dat

先看一下效果:

具体实现代码:

package com.provy.Demo;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/**
 * 使用socket和多线程实现的简单聊天室功能
 * UDP协议
 * @author 架构师小跟班 www.jiagou1216.com
 *
 */
public class ChatRoom {

	public static void main(String[] args) {
		SendThread st = new SendThread();
		ReceiveThread rt = new ReceiveThread();

		Thread t1 = new Thread(st);
		Thread t2 = new Thread(rt);
		t1.start();
		t2.start();

	}

}

/**
 * 发送端
 * 
 * @author 王翔宇
 *
 */
class SendThread implements Runnable {

	// 创建socket服务对象
	private DatagramSocket ds;

	public SendThread() {
		try {
			ds = new DatagramSocket();
		} catch (SocketException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void run() {
		try {

			// 封装键盘录入
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

			String line = null;
			while ((line = br.readLine()) != null) {
				// 自定义结束标记
				if ("over".equals(line)) {
					break;
				}

				// 创建并打包数据
				byte[] bys = line.getBytes();
				DatagramPacket dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("192.168.1.14"), 10010);
				// 发送数据
				ds.send(dp);
			}
			// 释放资源
			ds.close();
		} catch (Exception e) {

		}

	}

}

/**
 * 接收端
 * 
 * @author 王翔宇
 *
 */
class ReceiveThread implements Runnable {

	private DatagramSocket ds;

	public ReceiveThread() {
		try {
			ds = new DatagramSocket(10010);// 端口号
		} catch (SocketException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void run() {
		try {
			while (true) {
				byte[] bys = new byte[1024];
				DatagramPacket dp = new DatagramPacket(bys, bys.length);

				// 接收数据
				ds.receive(dp);

				// 解析数据
				String ip = dp.getAddress().getHostAddress();
				String data = new String(dp.getData(), 0, dp.getLength());
				System.out.println("用户【" + ip + "】发送信息:" + data);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}


文章评论