多线程 udp通讯和 tcp通讯

Posted axu-xxx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程 udp通讯和 tcp通讯相关的知识,希望对你有一定的参考价值。

网络通讯协议(规则):对数据的传输格式 速率 步骤等做了规定 常用的是TCP\\IP协议 UDP协议
IP地址 是电脑的地址 端口号指的是 电脑程序的端口号
InetAddress类
获取主机的inet对象
InetAddress inet=InetAddress.getByName("192.168.1.171");
获取本地主机对象
InetAddress inet2=InetAddress.getLocalHost();
获取主机名
inet.getHostName()
返回IP地址
inet.getHostAddress()
UDP协议
发送端不会在意接收端是否收到,接收端也不会在意发送端是否发送。
TCP协议
分客户端和服务器端 第一次握手是客户端向服务器端发出连接请求(请求连接) 你二次握手是服务器端向客户端回复一个响应(确认连接) 第三次握手 客户端在向服务端发送确认发送消息请求(正在连接)
UDP简单聊天
创建接收端
//创建DatagramSocket对象
DatagramSocket ds=new DatagramSocket(6666);
//创建接受数组
byte[] b=new byte[1024];
//创建数据包对象
while(true)
DatagramPacket dp=new DatagramPacket(b, b.length);
//接受数据
ds.receive(dp);
//拆包
//获取发送端ip地址
String ip=dp.getAddress().getHostAddress();
//获取端口号
int port=dp.getPort();
//获取数据长度
int length=dp.getLength();
System.out.println("ip地址为:"+ip+",端口号为:"+port+",发送内容为:"+new String (b,0,length));

//释放资源
//ds.close();

创建发送端
Scanner sc=new Scanner(System.in);
//创建数据包,封装要发送的数据以及明确接收端的IP和端口号
//明确接收端的ip地址
InetAddress ip=InetAddress.getByName("127.0.0.1");
//创建DatagramSocket对象 用于数据包发送
DatagramSocket ds=new DatagramSocket();
while(true)
byte[] b=sc.next().getBytes();
DatagramPacket dp=new DatagramPacket(b,b.length,ip,6666);
//发送
ds.send(dp);

//释放资源
//ds.close();

技术图片

 

 技术图片

 

 

 

tcp通讯

分客户端和服务器端   第一次握手是客户端向服务器端发出连接请求(请求连接)  你二次握手是服务器端向客户端回复一个响应(确认连接)   第三次握手 客户端在向服务端发送确认发送消息请求(正在连接)

客户端:

创建客户端对象:Socket socket=new Socket("127.0.0.1",6666);

通过Socket对象创建输出流对象:OutputStream out=socket.getOutputStream();

写要传输的内容:out.write("你好".getbytes())
接收服务器返回的数据:创建数据接收流对象:InputStream in=socket.getInputStream()
创建接收数据用的byte数组:byte[] bytes=new char[1024];7.创建ch的长度:int len=in.read(bytes);
接收数据并打印system.out.println(内容是:+new String(bytes,0,len));
释放资源:socket.close();

服务器端:
创建服务器对象:ServerSocket server=new ServerSocket(6666);
创建客户端接收对象:Socket socket=server.accrpt();
创建字节输入流:InputStream in=socket.getInputStream();
创建接收的byte数组:byte[] bytes=new byte[1024];
创建接收数据的byte数组长度:int len=in.read(bytes);  得到客户端ip:String ip=socket.getInetAddress().getHostAddress()
打印接收数据:system.out.println(ip地址:+ip+内容+new String(bytes,0,len));
回复客户端:1.创建字节输出流:OutputStream out=socket.getOutputStream();
写返回数据:out.writer("你好".getbytes); 3.释放资源:server.close();

技术图片

 

技术图片

 

以上是关于多线程 udp通讯和 tcp通讯的主要内容,如果未能解决你的问题,请参考以下文章

网络编程-Socket编程(异步通讯)(Tcp,Udp)

C#里使用UdpClient和线程来创建UDP网络通讯

C#里使用UdpClient和线程来创建UDP网络通讯

多线程之间实现通讯

java-- 多线程之间实现通讯

Java_多线程通讯