JAVA网络编程技术 - UDP练习,模仿多线程聊天室

今天学习了网络编程技术,了解了一些基本知识,知道什么是 UDP了。

跟着视频学啊学,反复看,做出来了第一个小例子。贴上代码,上面有我的注释,清晰的标明了整个过程的来龙去脉。稍后我学完整个网络编程技术的所有视频后我再贴上来我整理的一些资料。这里先记录下第一个小例子。

// 发送类
class SendMsg implements Runnable {

	private DatagramSocket ds; // 指定一个对象

	public SendMsg(DatagramSocket ds) {
		super();
		this.ds = ds;

	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		// 数据来源
		BufferedReader bufr = new BufferedReader(new InputStreamReader(
				System.in));
		String line = null;
		byte[] buf = new byte[1024];
		try {
			while ((line = bufr.readLine()) != null) {
				buf = line.getBytes(); // 拿到的数据进行字节拆分
				DatagramPacket dp = new DatagramPacket(buf, buf.length,
						InetAddress.getByName("192.168.1.104"), 10002);// 数据进行封包
				ds.send(dp);

				if ("over".equals(line)) {
					break;
				}
			}
			ds.close(); // 结束输入端对象
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}

// 接收对象
class ReveMsg implements Runnable {
	private DatagramSocket ds;// 建立接收端对象

	public ReveMsg(DatagramSocket ds) {
		super();
		this.ds = ds;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		while (true) {
			byte[] buf = new byte[1024]; // 建立一个接收容器
			DatagramPacket dp = new DatagramPacket(buf, 1024);// 接收数据存放到哪里,以及每次能接收多少
			try {
				ds.receive(dp); // 接收对象
				String str = new String(dp.getData(), 0, dp.getLength());
				String ip = dp.getAddress().getHostAddress();
				int post = dp.getPort();
				System.out.println(ip + "-" + post + " : " + str);
				if(str.equals("over")){
					SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 
					System.out.println(ip + "-" + post + " : " + "离开了聊天室,"+df.format(new Date()));
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}

}


主函数
package socket.chat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Date;

public class UdpChat {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		DatagramSocket send = new DatagramSocket();
		DatagramSocket reve = new DatagramSocket(10002);// 接收端要指定端口了,要不对象不知道去哪里接收数据

		new Thread(new SendMsg(send)).start();
		new Thread(new ReveMsg(reve)).start();

	}

}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值