UDP socket编程
来源:互联网 发布:射钉枪淘宝买的会查吗 编辑:程序博客网 时间:2024/04/28 14:56
服务器端
public class UDPServer {public static void main(String[]args) throws Exception{byte[] buf = new byte[100];//用来接收数据DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length);DatagramSocket datagramSocket = new DatagramSocket(9995);while(true){//receive()方法是阻塞方法,如果没有收到信息会一直等待//将接收的信息存放到datagramPacket当中datagramSocket.receive(datagramPacket);System.out.println("data is :" + new String(datagramPacket.getData()));}}}
客户端
public class UDPClient {public static void main(String[] args) throws Exception {byte[] buf = new String("UDP TEST data from client").getBytes(); ;DatagramPacket datagramPacket = new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),9995);DatagramSocket datagramSocket = new DatagramSocket();//将datagramPacket数据传输到目标地址datagramSocket.send(datagramPacket);}}
例子二(从疯狂JAVA中copy的)
package hb.udp;import java.awt.*;import java.net.*;import java.io.*;import java.util.*;public class UdpServer {public static final int PORT = 30000;// 定义每个数据报的最大大小为4Kprivate static final int DATA_LEN = 4096;// 定义该服务器使用的DatagramSocketprivate DatagramSocket socket = null;// 定义接收网络数据的字节数组byte[] inBuff = new byte[DATA_LEN];// 以指定字节数组创建准备接受数据的DatagramPacket对象private DatagramPacket inPacket = new DatagramPacket(inBuff, inBuff.length);// 定义一个用于发送的DatagramPacket对象private DatagramPacket outPacket;// 定义一个字符串数组,服务器发送该数组的的元素String[] books = new String[] { "轻量级J2EE企业应用实战", "基于J2EE的Ajax宝典", "Struts2权威指南", "ROR敏捷开发最佳实践" };public void init() throws IOException {try {// 创建DatagramSocket对象socket = new DatagramSocket(PORT);// 采用循环接受数据for (int i = 0; i < 1000; i++) {// 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组里。阻塞等待socket.receive(inPacket);// 判断inPacket.getData()和inBuff是否是同一个数组System.out.println(inBuff == inPacket.getData());// 将接收到的内容转成字符串后输出System.out.println(new String(inBuff, 1, inPacket.getLength()));// 从字符串数组中取出一个元素作为发送的数据byte[] sendData = books[i % 4].getBytes();// 以指定字节数组作为发送数据、以刚接受到的DatagramPacket的// 源SocketAddress作为目标SocketAddress创建DatagramPacket。outPacket = new DatagramPacket(sendData, sendData.length, inPacket.getSocketAddress());// 发送数据socket.send(outPacket);}}// 使用finally块保证关闭资源finally {if (socket != null) {System.out.println("udpserver close");socket.close();}}}public static void main(String[] args) throws IOException {new UdpServer().init();}}
package hb.udp;import java.awt.*;import java.net.*;import java.io.*;import java.util.*;public class UdpClient {// 定义发送数据报的目的地public static final int DEST_PORT = 30000;public static final String DEST_IP = "127.0.0.1";// 定义每个数据报的最大大小为4Kprivate static final int DATA_LEN = 4096;// 定义该客户端使用的DatagramSocketprivate DatagramSocket socket = null;// 定义接收网络数据的字节数组byte[] inBuff = new byte[DATA_LEN];// 以指定字节数组创建准备接受数据的DatagramPacket对象private DatagramPacket inPacket = new DatagramPacket(inBuff, inBuff.length);// 定义一个用于发送的DatagramPacket对象private DatagramPacket outPacket = null;public void init() throws IOException {try {// 创建一个客户端DatagramSocket,使用随机端口socket = new DatagramSocket();// 初始化发送用的DatagramSocket,它包含一个长度为0的字节数组outPacket = new DatagramPacket(new byte[1024], 5, InetAddress.getByName(DEST_IP), DEST_PORT);// 创建键盘输入流Scanner scan = new Scanner(System.in);// 不断读取键盘输入while (scan.hasNextLine()) {// 将键盘输入的一行字符串转换字节数组byte[] buff = scan.nextLine().getBytes();System.out.println("--------------"+buff[0]);// 设置发送用的DatagramPacket里的字节数据outPacket.setData(buff);// 发送数据报socket.send(outPacket);// 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组里。socket.receive(inPacket);System.out.println(new String(inBuff, 0, inPacket.getLength()));}}// 使用finally块保证关闭资源finally {if (socket != null) {System.out.println("udpclient close");socket.close();}}}public static void main(String[] args) throws IOException {new UdpClient().init();}}
- socket udp编程理论
- socket的udp编程
- Socket UDP编程
- UDP socket编程
- TCP、UDP、SOCKET编程
- Linux socket编程:udp
- UDP Socket编程
- python socket编程 UDP
- Socket编程UDP/TCP
- Socket编程-UDP协议
- Socket编程--TCP/UDP
- UDP Socket编程
- Java UDP Socket编程
- Socket编程TCP/UDP
- C#-Socket编程-UDP
- UDP通信socket编程
- python-socket-udp编程
- socket网络编程udp
- 线程常用的方法
- 用户定位location
- CSS3资料下载
- 从ffmpeg源代码分析如何解决ffmpeg编码的延迟问题
- 正则分组和边界匹配
- UDP socket编程
- 链表模式
- etmvc结合easyui-tree开发时的问题
- 利用MSXML解析XML文本(1)
- 简单工厂模式
- android使用多线程处理
- 使用Objective-C的文档生成工具:appledoc
- 动态代理 Proxy InvocationHandler学习
- 去除str1中的多余空格(即两个单词中间仅保留一个空格)