UDP通信原来不通过QQ、微信,还能这样聊天
UDP协议的特点:
UDP是一种无连接、不可靠传输的协议。
将数据源IP、目的地IP和端口以及数据封装成数据包,大小限制在64KB内,直接发送出去即可。
实现一发一收
注意:先要启动服务端,再启动客户端。不然会造成数据丢失!
客户端:
-
import java.net.DatagramPacket;
-
import java.net.DatagramSocket;
-
import java.net.InetAddress;
-
-
public class UDP_发送端 {
-
public static void main(String[] args) throws Exception {
-
//先要启动服务端,再启动客户端,不然会造成数据丢失
-
System.out.println("-----客户端启动-----");
-
//创建发送端对象,发送端自带默认的端口号
-
//DatagramSocket socket=new DatagramSocket();//采用默认端口号
-
DatagramSocket socket=new DatagramSocket(8786);//采用自己设定的端口号,但如果端口号已经被使用,则需要自己换一个端口号
-
//创建一个数据包对象封装数据
-
-
/*
-
public DatagramPacket(byte buf[], int offset, int length,
-
InetAddress address, int port)
-
参数一:封装要发送的数据
-
参数二:发送数据的大小
-
参数三:服务端的主机IP地址
-
参数四:服务端的端口
-
*/
-
byte [] buffer="这是发送端".getBytes();
-
DatagramPacket packet=new DatagramPacket(buffer,buffer.length, InetAddress.getLocalHost(),6666);
-
//发送数据出去
-
socket.send(packet);
-
//如果发送完毕,记得关闭
-
socket.close();
-
}
-
}
服务端:
-
import java.net.DatagramPacket;
-
import java.net.DatagramSocket;
-
class UDP_接收端{
-
public static void main(String[] args) throws Exception {
-
//先要启动服务端,再启动客户端,不然会造成数据丢失
-
System.out.println("-----服务端启动-----");
-
//创建接收端对象,注册端口
-
DatagramSocket socket=new DatagramSocket(6666);
-
//创建一个数据包对象接收数据
-
byte []buffer=new byte[1024*64];
-
DatagramPacket packet=new DatagramPacket(buffer,buffer.length);
-
//等待接收数据
-
socket.receive(packet);
-
//取出数据
-
//读取多少倒出多少
-
int len=packet.getLength();
-
String str=new String(buffer,0,len);
-
System.out.println("接收到:" str);
-
-
System.out.println(packet.getPort());//对方端口号
-
//关闭,释放资源
-
socket.close();
-
}
-
}
实现多发多收:
只要你和对方在同一个局域网,并且知道对方的端口号,你们便可以通过UDP相互通信
注意:这里的通信是指不通过QQ这些软件,从编译器上通过代码运行后来实现通信。
客户端:
-
import java.net.DatagramPacket;
-
import java.net.DatagramSocket;
-
import java.net.InetAddress;
-
import java.util.Scanner;
-
public class UDP_多发多收 {
-
public static void main(String[] args) throws Exception {
-
//先要启动服务端,再启动客户端,不然会造成数据丢失
-
System.out.println("-----客户端启动-----");
-
DatagramSocket socket=new DatagramSocket(8786);//采用自己设定的端口号,但如果端口号已经被使用,则需要自己换一个端口号
-
Scanner sc=new Scanner(System.in);
-
while (true) {
-
System.out.println("请输入你要发送的消息:");
-
String str=sc.nextLine();
-
if("exit".equals(str)){
-
System.out.println("离线成功!");
-
socket.close();//释放资源
-
break;
-
}
-
byte [] buffer=str.getBytes();
-
DatagramPacket packet=new DatagramPacket(buffer,buffer.length, InetAddress.getLocalHost(),6666);
-
//发送数据出去
-
socket.send(packet);
-
}
-
}
-
}
服务端:
-
import java.net.DatagramPacket;
-
import java.net.DatagramSocket;
-
class UDP_接收端2{
-
public static void main(String[] args) throws Exception {
-
//先要启动服务端,再启动客户端,不然会造成数据丢失
-
System.out.println("-----服务端启动-----");
-
//创建接收端对象,注册端口
-
DatagramSocket socket=new DatagramSocket(6666);
-
//创建一个数据包对象接收数据
-
byte []buffer=new byte[1024*64];
-
DatagramPacket packet=new DatagramPacket(buffer,buffer.length);
-
-
while (true) {
-
//等待接收数据
-
socket.receive(packet);
-
//取出数据
-
//读取多少倒出多少
-
int len=packet.getLength();
-
String str=new String(buffer,0,len);
-
System.out.println("接收到了来自:" packet.getAddress() "对方的端口号是:" packet.getPort() "的消息:" str);
-
}
-
}
-
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfcgci
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01