java UDP多线程回射服务器
来源:互联网 发布:社区门诊软件 编辑:程序博客网 时间:2024/06/06 10:00
UDP协议简介
UDP是一种无连接的通信协议,提供不可靠的信息传输服务,该协议工作于计算机网络中的传输层。
由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。
UDP协议的主要作用是将网络数据流量压缩成数据包形式。
.UDP提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,UDP传输的可靠性由应用层负责。
UDP通信流程
由于udp是无连接的通信,所以通信过程中不需要像TCP协议中的监听(listen),接待(accept)。
下面是一个基于java语言实现的UDP通信模型
package com.server;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;/* * * Udp多线程回射服务器 */class UdpServerThread extends Thread{private DatagramSocket socket;//private byte[] infoBytes;String info = null;private int port;InetAddress ip;public UdpServerThread(DatagramPacket packet, DatagramSocket socket, byte[] infoBytes) {this.socket = socket;this.info = new String(infoBytes, 0, packet.getLength());this.port = packet.getPort();this.ip = packet.getAddress();}@Overridepublic void run() {super.run();//打印消息System.out.println("客户端-"+ ip + " port=" + port + "说:"+info);//回射byte[] echobuf = ("server:"+info).getBytes();DatagramPacket packet2 = new DatagramPacket(echobuf, echobuf.length, ip, port);try {socket.send(packet2);}catch (IOException e) {// TODO: handle exceptione.printStackTrace();}}}public class Server2{private static final int PORT = 9960;public static void main(String[] args) throws IOException {DatagramSocket socket = new DatagramSocket(PORT);byte[] infoBytes = new byte[1024];System.out.println("Server is running...");while(true) {DatagramPacket packet = new DatagramPacket(infoBytes, infoBytes.length);socket.receive(packet);//接收数据包//阻塞函数//接收到一个包就就开启一个线程UdpServerThread thread = new UdpServerThread(packet, socket, infoBytes);thread.start();}}}
package com.client;//package com.client;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;/* * Udp客户端 */public class Client2 {//enum PORT{one,two,three}private final static int PORT = 9960; //通信端口要与服务器端一致public static void main(String[] args) throws IOException {// TODO Auto-generated method stub//创建套接字DatagramSocket client = new DatagramSocket();BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); InetAddress ip = InetAddress.getByName("127.0.0.1");//使用本机ip地址//创建数据包//DatagramPacket(byte[] buf, int length, InetAddress address, int port) //client.connect(ip,PORT);String buf = null;while((buf = in.readLine()) !=null) {//创建数据包byte[] sendbuf = buf.getBytes();DatagramPacket sendPacket = new DatagramPacket(sendbuf, sendbuf.length,ip,PORT);client.send(sendPacket);//阻塞函数//接收服务器端发来的消息byte[] recvbuf = new byte[256];DatagramPacket recvPacket = new DatagramPacket(recvbuf, recvbuf.length);client.receive(recvPacket);byte[] buf2 = recvPacket.getData();int len = recvPacket.getLength();String result = new String(buf2, 0, len);System.out.println("发送了:" + result);if("exit".equals(buf))break;}client.close(); //关闭套接字in.close();}}
打开服务器,同时运行2个客户端程序并发送数据
运行结果:
Server is running...
客户端-/192.168.4.109 port=64517说:111
客户端-/192.168.4.109 port=64518说:222
客户端-/192.168.4.109 port=64517说:333
客户端-/192.168.4.109 port=64518说:444
客户端-/192.168.4.109 port=64517说:444
客户端-/192.168.4.109 port=64518说:555
客户端-/192.168.4.109 port=64517说:exit
客户端-/192.168.4.109 port=64518说:exit
阅读全文
0 0
- java UDP多线程回射服务器
- UDP和多线程服务器
- UDP回射服务器
- Java多线程UDP客户端与服务器间使用Socket通信
- java基础复习-多线程UDP
- Day34、UDP客户服务器通信、多线程
- UNIX UDP回射服务器/客户端
- 基于UDP广播的回射服务器
- UDP-Java-客户机/服务器应用程序
- Java自定义多线程服务器
- java多线程web服务器
- java多线程HTTP服务器
- JAVA 多线程实现聊天(UDP通信 )
- java--基于UDP的多线程通信
- JAVA中的UDP通信(多线程)
- JAVA中基于UDP实现多线程通信
- JAVA 多线程实现简单UDP一对一聊天
- tcp和udp多线程的epoll服务器+客户端源代码
- Kinect Win10环境配置
- 命令模式
- 2017面试题总结
- c语言写俄罗斯方块-简单易懂
- 编码习惯
- java UDP多线程回射服务器
- HDU 3068 最长回文(manacher算法)
- django框架对数据库的操作
- HDU 1005 Number Sequence 矩阵快速幂
- BZOJ 3239 [BSGS]
- C#中的回调函数:以最简单的方式讲解最实用的知识点
- 邝斌的ACM模板(相关公式)
- Activemq实现Mysql与SolrCloud同步策略
- 学习Halcon错误总结