02-java的网络编程(用UDP实现相互收发消息)

java的网络编程和图形化界面相结合

说明:
1.用的是纯UDP协议,没有用到TCP,就像是两个对讲机,是Client和Client之间的通信,没有第三方监听的Server参与。
2.使用之前先在MyPort中开启监听端口,端口可以自己任意设置,但是要在0-65535之间,尽量在1024-65535之间,0-1024我们常常认为是软件经常用到的监听窗口,所以在合理范围内还是设置大一点的数。
3.提供的代码可以认为是一个Client,你想要模拟多机通信就多建几个class,代码直接复制粘贴。
4.我们假设有两个Client,先设置两个MyPort。如果运行在同一台电脑,other’s ip可以填127.0.0.1,或者你知道自己本机ip地址,可以填本机ip地址,port就填对方的监听端口。如果运行在两台不同的电脑上,你要先知道对方的ip,你知道对方ip和监听端口后,你先发个消息过去,对方会显示【ip=xxx.xxx.xx.xx,port=xxxx】send xxx。对方就可以知道你在给他发消息,再填入你的ip和端口就能给你发消息了。

一.先看看效果图

1.初始化界面
在这里插入图片描述
2.监听端口的打开
在这里插入图片描述

3.同理打开另一个Client,也设置监听端口,监听端口设置为8888。现在我在监听端口为6666这里输入监听端口为8888的ip和端口,然后会看到发送消息的go键可以使用,且监听端口为8888的Client收到监听端口为6666的存在。
在这里插入图片描述
4.我们监听端口8888如果要发送消息给监听端口6666的张三,我们就输入张三的ip和端口信息
在这里插入图片描述
5.现在他们就能感知对方的存在并进行通信了。
在这里插入图片描述
6.如果张三退出了聊天,李四也能知道张三已经退出来,所以之后再发消息张三也收不到了。
在这里插入图片描述

二.主要的接收和发送代码如下

接收线程
		class receivei_thread implements Runnable{
			private int MyPort;
			public receivei_thread(int MyPort) {
				this.MyPort=MyPort;
			}
			public void run() {
				try{
				re_socket=new DatagramSocket(Myport);
				re_b=new byte[1024];		
				re_packet=new DatagramPacket(re_b,re_b.length);
				if(re_packet.getLength()!=0) {
				while(true){
					re_socket.receive(re_packet);
					ta.append("\n"+format.format(new Date())+"\nRECEIVER::"+new String(re_b,0,re_packet.getLength())+"\n");
					}
				}}catch(Exception e){}}
		}
		发送线程
		class send_thread implements Runnable{
			private String other_ip;
			private int other_port;
			public send_thread(String other_ip,int other_port) {
				this.other_ip=other_ip;
				this.other_port=other_port;
			}
			public void run() {	
				try{
				se_socket=new DatagramSocket();
				if(!tf.getText().equals("")) {
				send_msage=tf_name.getText()+"SEND::"+tf.getText();
				tf.setText("");
				se_b=send_msage.getBytes();
				se_packet=new DatagramPacket(se_b, se_b.length, InetAddress.getByName(other_ip),other_port);
				se_socket.send(se_packet);
				ta.append("\n"+format.format(new Date())+"\n"+send_msage+"\n");
				}}catch(Exception e){}
			}
		}

三.总结
本次编程主要是为了掌握网络编程的知识点。用到了双线程的知识,也是第一次使用线程思想。对于一个刚刚接触网络编程的人来说,在机房试验两台主机之间进行通信,并且能通信的感觉的确不错。其实对于一个学习编程语言的人来说,我发现有一个很好的学习方法,就是初步学习知识点后,确立一个目标,做个东西出来。一开始,你现有知识点肯定是解决不了,所以你要去拓展,知道缺哪块知识点后,你就会更有动力去学习它,这样一来,既让自己的学习兴趣起来了,又让自己的知识点掌握得更多了。相信看我这篇博客的也应该是一个学生,那大家一起努力吧。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值