Java之网络编程(二)UDP
来源:互联网 发布:ios常用多线程编程组件 编辑:程序博客网 时间:2024/04/28 01:21
/**
* 在java中网络通讯也称作为Socket(套接字)通讯,要求通讯的两台机器都必须安装Socket
* 不同的协议有不同的Socket
*
* UDP通讯协议的特点:
* 1.将数据及其原源和目的封装为数据包,不需要建立连接
* 2.每个数据包大小限制在64k
* 3.因为无连接,所以不可靠
* 4.因为不需要建立连接,所以速度快
* 5.UDP通讯是不分服务端与客户端的,只分发送端与接收端
* 如:人说话、CS等
*
* TCP通讯协议的特点:
* 1.面向连接,有特有的通道
* 2.在连接中传输大数据量
* 3.通过三次握手机制连接,可靠协议
* 4.通信前必须建立连接,效率稍低
* 如:打电话、文件的传送
*
* UDP协议下的Socket:
* DatagramSocket(UDP插座服务)
* DatagramPacket(数据包类)
* DatagramPacket(buf, length, address, port)
* buf:发送的是数据内容
* length:发送数据内容大小
* address:发送的目的IP地址对象
* pprt:端口号
*
运行结果:
三、开启线程实现两个客户端之间能够聊天
客户端二:
实验效果图:
* 在java中网络通讯也称作为Socket(套接字)通讯,要求通讯的两台机器都必须安装Socket
* 不同的协议有不同的Socket
*
* UDP通讯协议的特点:
* 1.将数据及其原源和目的封装为数据包,不需要建立连接
* 2.每个数据包大小限制在64k
* 3.因为无连接,所以不可靠
* 4.因为不需要建立连接,所以速度快
* 5.UDP通讯是不分服务端与客户端的,只分发送端与接收端
* 如:人说话、CS等
*
* TCP通讯协议的特点:
* 1.面向连接,有特有的通道
* 2.在连接中传输大数据量
* 3.通过三次握手机制连接,可靠协议
* 4.通信前必须建立连接,效率稍低
* 如:打电话、文件的传送
*
* UDP协议下的Socket:
* DatagramSocket(UDP插座服务)
* DatagramPacket(数据包类)
* DatagramPacket(buf, length, address, port)
* buf:发送的是数据内容
* length:发送数据内容大小
* address:发送的目的IP地址对象
* pprt:端口号
*
* */
一、实现接收端接收数据,发送端发送数据
package com.shuhuadream.udp;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.SocketException;//UDP 接收端 接收数据public class MyReceiver {public static void main(String[] args) {try {//1.创建接收端对象DatagramSocket socket = new DatagramSocket(6565);//2.创建byte数组容器,封装为数据包用于存放数据byte[] buf = new byte[1024];DatagramPacket packet = new DatagramPacket(buf,buf.length);//3.调用UDP的服务接收数据socket.receive(packet);//receive是一个阻塞方法,没有接收到数据一直继续等待,数据实际上就是存储到了byte的字节数组中//4.处理数据System.out.println("发送端传来的数据:"+new String(buf,0,packet.getLength()));//5.关闭资源socket.close();} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
package com.shuhuadream.udp;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;import java.net.UnknownHostException;//UDP 发送端 发送数据public class MySender {public static void main(String[] args) {try {//1.创建发送端发送对象DatagramSocket socket = new DatagramSocket(7777);//2.准备数据,并将数据封装到数据包内String msg = "生当作人杰,死亦为鬼雄";byte[] data = msg.getBytes();DatagramPacket packet = new DatagramPacket(data,data.length,InetAddress.getLocalHost(),6565);//3.调用udp服务发送数据包socket.send(packet);//4.关闭资源--实际上是释放占用的端口号socket.close();} catch (SocketException e) {e.printStackTrace();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
运行结果:
二、实现发送端单项多次给接收端发送信息
package com.shuhuadream.udp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;//发送端public class ChatSender {public static void main(String[] args) {try {//创建发送端对象DatagramSocket socket = new DatagramSocket(2443);//明确要发送的数据BufferedReader br = new BufferedReader(new InputStreamReader(System.in));while(true){String line = br.readLine();byte[] data = line.getBytes();//将数据打包DatagramPacket packet = new DatagramPacket(data,data.length,InetAddress.getByName("10.41.151.14"),6565);//发送数据socket.send(packet);if(line.equals("bye")){break;}}//关闭发送端资源br.close();socket.close();} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
package com.shuhuadream.udp;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.SocketException;//接收端public class ChatReceiver {public static void main(String[] args) {try {//1.创建接收端对象DatagramSocket socket = new DatagramSocket(6565);//2.创建byte数组容器,封装为数据包用于存放数据byte[] buf = new byte[1024];while(true){DatagramPacket packet = new DatagramPacket(buf,buf.length);//3.调用UDP的服务接收数据socket.receive(packet);//4.处理数据System.out.println(packet.getAddress().getHostAddress()+":"+new String(packet.getData(),0,packet.getLength()));}////5.关闭资源//socket.close();} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
三、开启线程实现两个客户端之间能够聊天
package com.shuhuadream.udp2;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;public class UDPSendThread extends Thread{private DatagramSocket socket;//发送端对象private InetAddress address;//目标地址private int port;//端口号public UDPSendThread(DatagramSocket socket, InetAddress address, int port) {super();this.socket = socket;this.address = address;this.port = port;}public void run() {//获取要发送的数据BufferedReader br = new BufferedReader(new InputStreamReader(System.in));while(true){try {String line = br.readLine();byte[] data = line.getBytes();//将数据打包DatagramPacket packet = new DatagramPacket(data,data.length,address,port);//发送数据socket.send(packet);} catch (IOException e) {e.printStackTrace();}}}}
package com.shuhuadream.udp2;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;public class UDPReceiverThread extends Thread{private DatagramSocket socket;//接收端对象public UDPReceiverThread(DatagramSocket socket) {super();this.socket = socket;}@Overridepublic void run() {while(true){//准备容器,封装为数据包用于存放数据byte[] buf = new byte[1024*16];DatagramPacket packet = new DatagramPacket(buf,buf.length);try {//接收数据socket.receive(packet);//处理数据System.out.println(packet.getAddress().getHostAddress()+":"+new String(packet.getData(),0,packet.getLength()));} catch (IOException e) {e.printStackTrace();}}}}接下来两个客户端都开启接收和发送线程
客户端一:
package com.shuhuadream.udp2;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;import java.net.UnknownHostException;public class UDPClient01 {public static void main(String[] args) {try {DatagramSocket socket = new DatagramSocket(8888);InetAddress address = InetAddress.getByName("10.41.151.14");//创建发送、接收线程UDPSendThread sendThread = new UDPSendThread(socket, address, 4444);UDPReceiverThread receiverThread = new UDPReceiverThread(socket);//开启线程sendThread.start();receiverThread.start();} catch (SocketException e) {e.printStackTrace();} catch (UnknownHostException e) {e.printStackTrace();}}}
客户端二:
package com.shuhuadream.udp2;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;import java.net.UnknownHostException;public class UDPClient02 {public static void main(String[] args) {try {DatagramSocket socket = new DatagramSocket(4444);InetAddress address = InetAddress.getByName("10.41.151.63");//创建发送、接收线程UDPSendThread sendThread = new UDPSendThread(socket, address, 8888);UDPReceiverThread receiverThread = new UDPReceiverThread(socket);//开启线程sendThread.start();receiverThread.start();} catch (SocketException e) {e.printStackTrace();} catch (UnknownHostException e) {e.printStackTrace();}}}
实验效果图:
阅读全文
0 0
- Java之网络编程(二)UDP
- java----网络编程(二)UDP
- java网络编程之UDP
- java网络编程之UDP
- java网络编程之UDP
- Java网络编程之UDP
- JAVA网络编程之UDP
- java 网络编程之UDP
- Java网络编程之UDP
- java网络编程之UDP
- Java 网络编程之 (UDP网络聊天程序)
- Java网络编程之UDP网络通信
- Java基础-网络编程之UDP编程
- Linux--网络编程(二)UDP编程
- 网络编程Socket之UDP(二)面向“连接”的UDP
- 网络编程(二)--UDP
- Java网络编程(UDP)
- JAVA--网络编程(UDP)
- linux 处理两个文件的并集,交集,计数
- 系统相关功能开发(八)-消息
- [NOIP模拟赛]传递情报
- okhttp上传
- Android Studio配置OpenCV+Tesseract-OCR识别图片
- Java之网络编程(二)UDP
- Hadoop与spark性能比较试验
- PCA降维(MATLAB实践)
- 餐厅系统的餐次计数功能(纯js代码实现)
- jQuery常用方法总结
- JAVA反射(一)获取Class对象的三种方式及其区别
- 求职面试时应该如何谈薪水
- [转载]python中super出现的TypeError: must be type, not classobj 原因及解决
- 原生JS实现tab切换--web前端开发