IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> java当中用UDP实现相互交流 -> 正文阅读

[网络协议]java当中用UDP实现相互交流

一:引言

实现一方 到另一方可以发送信息,而另一方也能回复信息。这里用到了多线程,开辟两条不同的执行路径,一个执行接收信息,一个执行发送信息,但其端口号 要对应 ,即一个发送端口,对应一个接收端口。

二:上码:

1:发送端类的实现

package com.wyj.three;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

/**
 * 发送端
 * 
 * @author 86155
 *
 */
public class Demo12_talk发送02 implements Runnable{
	
	private DatagramSocket client;
	private BufferedReader reader;
	private int port;
	private int toport;
	private String toIP;
	
	 public Demo12_talk发送02(int port,int toport,String toIP) {
		 this.port = port;
		 this.toport = toport;
		 this.toIP = toIP;
		 
		 try {
			client = new DatagramSocket(port);
			reader = new BufferedReader(new InputStreamReader(System.in));

		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	 }
	 
	@Override
	public void run() {
		// TODO Auto-generated method stub
		 while( true ) {
			 String msg ;
			 try {
				  msg = reader.readLine();
				 byte[] dates = msg.getBytes();
		//		 3.封装成 DatagramPacket 包裹  指定目的地 即Ip地址和端口
				 DatagramPacket packet = new DatagramPacket(dates, 0,dates.length, 
						 				new InetSocketAddress(this.toIP,this.toport));
				 
		//		 4.发送包裹 send(DatagramPacket p)
				 client.send(packet);
				 
				 if(msg.equals("bye")) {
					 break;
				 }
			 }catch( IOException e  ) {
				 e.printStackTrace();
			 }
			 
		 }
		 
		 client.close();
	}

}

2:接受端类的实现

package com.wyj.three;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * 接收端
 * 
 * 
 * @author 86155
 *
 */
public class Demo11_talk接收端02 implements Runnable{

	DatagramSocket server;
	 
	 public Demo11_talk接收端02(int port) {
		 try {
			server = new DatagramSocket(port);
		} catch (SocketException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	 }
	
	
	
	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(true) {
			byte [] container = new byte[1024*60];
			DatagramPacket packet = new DatagramPacket(container,container.length);
//			3.阻塞式接受包裹 receive?(DatagramPacket p)
			try {
				server.receive(packet);//会有延迟
				
				byte[] dates = packet.getData();
				int len = packet.getLength();//得用packet的实际大小  
				String date = new String(dates,0,len);
				
				System.out.println(date);
				
				if( date.equals("bye")) {
					break;
				}
				
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			

		}
		//释放资源
		server.close();
	}

}

3:具体的实现(老师与学生的交流)

package com.wyj.three;
/**
 * 实现相互交流吧
 * 
 * 
 * @author 86155
 *
 */
public class Demo1_student {
	public static void main(String[] args) {	
		new Thread(new Demo11_talk接收端02(9998)).start();//接受
		
		new Thread(new Demo12_talk发送02(5555, 9997, "localhost")).start();//发送
	}
}

4:具体的实现(老师与学生的交流)

package com.wyj.three;
/**
 * 
 * 实现相互交流
 * 
 * @author 86155
 *
 */
public class Demo2_teacher {
	public static void main(String[] args) {
		
		
		new Thread(new Demo12_talk发送02(8888, 9998, "localhost")).start();//发送
		
		new Thread(new Demo11_talk接收端02(9997)).start();//接受
	}
}

不同的颜色代表接受端和发送端不相同(黑色代表接收端)

在这里插入图片描述

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:42:25  更:2021-08-05 17:42:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:24:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码