UDP 多线程 通讯协议
来源:互联网 发布:淘宝权吃鸡id 编辑:程序博客网 时间:2024/05/17 19:56
以下的ip地址填写程式所属服务器的地址、
1、客户端
package cn.okline.udp;/** * UDP连接客户端 * 项目名称:[test] * 包:[cn.okline.udp] * 文件名称:[UdpClient] * 描述:[一句话描述该文件的作用] * 创建人:[彭小林] * 创建时间:[2016年7月21日 上午10:04:20] * 修改人:[彭小林] * 修改时间:[2016年7月21日 上午10:04:20] * 修改备注:[说明本次修改内容] * 版权所有:深圳市欧乐在线技术发展有限公司 * 版本:[v1.0] */public class UdpClient{ public static void main(String[] args) { try { for (int i = 0; i < 100; i++) { new Thread(new ClientImpl()).start(); } } catch (Exception e) { e.printStackTrace(); } }}
package cn.okline.udp;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;import java.util.Arrays;import java.util.Random;import java.util.UUID;public class ClientImpl implements Runnable{ private Random random = new Random(); private String uuid = UUID.randomUUID().toString(); public void run() { try { init(); byte[] buffer = new byte[1024 * 64]; // 缓冲区 // 发送随机的数据 byte[] btSend = new byte[] { (byte) random.nextInt(127), (byte) random.nextInt(127), (byte) random.nextInt(127) }; DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("192.168.1.40"), 2233); packet.setData(btSend); System.out.println(uuid + ":发送:" + Arrays.toString(btSend)); try { sendDate(packet); } catch (Exception e) { e.printStackTrace(); } receive(packet); byte[] bt = new byte[packet.getLength()]; System.arraycopy(packet.getData(), 0, bt, 0, packet.getLength()); if (null != bt && bt.length > 0) { System.out.println(uuid + ":收到:" + Arrays.toString(bt)); } /*Thread.sleep(1 * 1000);*/ } catch (Exception e) { e.printStackTrace(); } } /** * 接收数据包,该方法会造成线程阻塞 * @return * @throws IOException */ public void receive(DatagramPacket packet) throws Exception { try { datagramSocket.receive(packet); } catch (Exception e) { throw e; } } /** * 发送数据包到指定地点 * @param bt * @throws IOException */ public void sendDate(DatagramPacket packet) { try { datagramSocket.send(packet); } catch (Exception e) { e.printStackTrace(); } } /** * 初始化客户端连接 * @throws SocketException */ public void init() throws SocketException { try { datagramSocket = new DatagramSocket(random.nextInt(9999)); datagramSocket.setSoTimeout(10 * 1000); System.out.println("客户端启动成功"); } catch (Exception e) { datagramSocket = null; System.out.println("客户端启动失败"); e.printStackTrace(); } } private DatagramSocket datagramSocket = null; // 连接对象 }
2 服务端
package cn.okline.udp;/** * UDP连接客户端 * 项目名称:[test] * 包:[cn.okline.udp] * 文件名称:[UdpClient] * 描述:[一句话描述该文件的作用] * 创建人:[彭小林] * 创建时间:[2016年7月21日 上午10:04:20] * 修改人:[彭小林] * 修改时间:[2016年7月21日 上午10:04:20] * 修改备注:[说明本次修改内容] * 版权所有:深圳市欧乐在线技术发展有限公司 * 版本:[v1.0] */public class UdpClient{ public static void main(String[] args) { try { for (int i = 0; i < 100; i++) { new Thread(new ClientImpl()).start(); } } catch (Exception e) { e.printStackTrace(); } }}
package cn.okline.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Arrays;
import java.util.Random;
import java.util.UUID;
public class ClientImpl implements Runnable
{
private Random random = new Random();
private String uuid = UUID.randomUUID().toString();
public void run(){ try { init(); byte[] buffer = new byte[1024 * 64]; // 缓冲区 // 发送随机的数据 byte[] btSend = new byte[] { (byte) random.nextInt(127), (byte) random.nextInt(127), (byte) random.nextInt(127) }; DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("192.168.1.40"), 2233); packet.setData(btSend); System.out.println(uuid + ":发送:" + Arrays.toString(btSend)); try { sendDate(packet); } catch (Exception e) { e.printStackTrace(); } receive(packet); byte[] bt = new byte[packet.getLength()]; System.arraycopy(packet.getData(), 0, bt, 0, packet.getLength()); if (null != bt && bt.length > 0) { System.out.println(uuid + ":收到:" + Arrays.toString(bt)); } /*Thread.sleep(1 * 1000);*/ } catch (Exception e) { e.printStackTrace(); }}/** * 接收数据包,该方法会造成线程阻塞 * @return * @throws IOException */public void receive(DatagramPacket packet) throws Exception{ try { datagramSocket.receive(packet); } catch (Exception e) { throw e; }}/** * 发送数据包到指定地点 * @param bt * @throws IOException */public void sendDate(DatagramPacket packet){ try { datagramSocket.send(packet); } catch (Exception e) { e.printStackTrace(); }}/** * 初始化客户端连接 * @throws SocketException */public void init() throws SocketException{ try { datagramSocket = new DatagramSocket(random.nextInt(9999)); datagramSocket.setSoTimeout(10 * 1000); System.out.println("客户端启动成功"); } catch (Exception e) { datagramSocket = null; System.out.println("客户端启动失败"); e.printStackTrace(); }}private DatagramSocket datagramSocket = null; // 连接对象
}
0 0
- UDP 多线程 通讯协议
- UDP通讯协议
- IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
- udp通讯程序多线程
- TCP通讯协议和UDP通讯协议
- 基于UDP的通讯协议
- 用udp协议通讯示例
- Delphi中UDP协议通讯
- tcp和udp通讯协议
- Android之UDP协议通讯
- A20_Socket编程UDP协议通讯
- 多线程UDP传输协议
- 基于UDP的通讯协议(zz)
- Visual C++设计UDP协议通讯示例
- 用udp协议通讯示例(zz)
- Visual C++设计UDP协议通讯示例
- 创建基于UDP协议的socket通讯
- 通讯协议的选择,TCP or UDP
- 打印沙漏三角形
- 数据结构实验之数组一:矩阵转置
- 如何理解混合云
- JavaScript的垃圾回收
- Java 程序员应会的 Linux 命令
- UDP 多线程 通讯协议
- 从线程返回信息
- 日历中的星期一问题
- jasmine单元测试
- XML DOM 节点
- 【C/C++】将字符串中间的空格替换为"%20"
- CodeForces 604A Uncowed Forces
- WebStorm的基本配置
- 小问题大脑洞