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.初始化界面

java socket与plc通信 java怎么和plc网口通讯_图形化网络编程


2.监听端口的打开

java socket与plc通信 java怎么和plc网口通讯_java网络编程_02

3.同理打开另一个Client,也设置监听端口,监听端口设置为8888。现在我在监听端口为6666这里输入监听端口为8888的ip和端口,然后会看到发送消息的go键可以使用,且监听端口为8888的Client收到监听端口为6666的存在。

java socket与plc通信 java怎么和plc网口通讯_java网络编程_03


4.我们监听端口8888如果要发送消息给监听端口6666的张三,我们就输入张三的ip和端口信息

java socket与plc通信 java怎么和plc网口通讯_图形化网络编程_04


5.现在他们就能感知对方的存在并进行通信了。

java socket与plc通信 java怎么和plc网口通讯_java socket与plc通信_05


6.如果张三退出了聊天,李四也能知道张三已经退出来,所以之后再发消息张三也收不到了。

java socket与plc通信 java怎么和plc网口通讯_java网络编程_06

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

接收线程
		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){}
			}
		}

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