java UDP/IP
来源:互联网 发布:怎么取消淘宝运费险 编辑:程序博客网 时间:2024/05/29 13:52
一、UDP概念:
UDP是在IP上发送数据的另一种协议。不可靠,无法知道数据是否到达,也无法知道数据的不同部分是否已发送时的数据到达。
UDP为什么有使用之地:在实时音频或视频中丢失或交换数据包只会出现噪声。噪声是可以容忍的。但是不可容忍停顿,UDP的实现分为两个类:DatagramPacket(将数据字节填充到数据报的UDP包中)和DatagramSocket(可以收发UDP数据报)。
与TCP的ServerSocket和Socket不同之处:
1.UDP没有两台主机间唯一连接的概念,一个DatagramSocket可以从多个独立主机收发数据。此 处的socket并不专注于一个连接。
2.TCP将网络视为流,通过socket获取输入输出流来收发数据,UDP以数据包形式发送
DatagramPacketUDP数据报基于IP建立的,每台主机有65536个端口号可以使用。数据报中字节数限制为65536-8 个字节(首部要用8个字节)
二、DatagramPacket类中函数
getInetAddress():返回一个包含远程主机地址的InetAddress对象。如果数据报是internet接收的,返回的地址是发送机器的地址。如果是客户端,则返回的是寻址地址。
getPort():返回远程端口
SocketAddress getSocketAddress():返回一个包含远程主机和端口的SocketAddress对象。
byte[] getData():返回一个字节数组,其中包含数据报中的数据
getLength():返回数据报中数据的字节数。它与getData()返回的数组长度不一定相等,
getLength()返回的值可能小于getData()返回的数组长度。
setData(byte[] data):
setData(byte[] data,int offset,int length)
setLength(int length):会改变内部缓冲区中包含实际数据报数据的字节数,而不包含未填充数据的空间。
TCP端口和UDP端口没有关联,TCP和UDP可以使用相同的端口号
setSoTimeout(int timeout):默认0永不超时
setReceiveBufferSize(int size)throws SocketException:
建议对来自此socket的输入进行缓冲时使用的字符字节数,但是底层完全可以忽略此建议
示例一://服务器public class Server {private void start() throws Exception {DatagramSocket socket = new DatagramSocket(8888);//服务器端口号为8888byte[] receiveBuffer = new byte[1024];//服务器使用receiverBuffer来存储接收到的数据DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, receiveBuffer.length);socket.receive(receivePacket);//阻塞等待接收客户端数据,接收到后会保存在receiverBuffer中/**把接收到的数据转换成字符串 * receivePacket.getData();//返回的对象就是receiveBuffer; * 所以下面的一行代码可以改为 * String s = new String(receivePacket.getData()).trim() */String s = new String(receiveBuffer).trim();System.out.println(s);socket.close();}public static void main(String[] args) throws Exception {new Server().start();}}//客户端public class Client {private void start() throws Exception {DatagramSocket socket = new DatagramSocket();byte[] sendBuffer = "Hello".getBytes();InetAddress address = InetAddress.getByName("127.0.0.1");//address代表服务器的ip,8888是服务器的端口号DatagramPacket sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, address, 8888);socket.send(sendPacket);//发送socket.close();}public static void main(String[] args) throws Exception {new Client().start();}}示例二://服务器public class Server {private void start() throws Exception {DatagramSocket socket = new DatagramSocket(8888);// 服务器端口号为8888byte[] receiveBuffer = new byte[1024];// 服务器用receiverBuffer来存储接收的数据DatagramPacket receivePacket = new DatagramPacket(receiveBuffer,receiveBuffer.length);socket.receive(receivePacket);// 阻塞等待接收客户端数据,接收到保存在receiverBuffer中String s = new String(receivePacket.getData(), 0, receivePacket.getLength());System.out.println(s);//Hellobyte[] sendBuffer = "OK".getBytes();InetAddress clientAddress = receivePacket.getAddress();int clientPort = receivePacket.getPort();DatagramPacket sendPacket = new DatagramPacket(sendBuffer,sendBuffer.length,clientAddress, clientPort);socket.send(sendPacket);socket.close();}public static void main(String[] args) throws Exception {new Server().start();}}//客户端public class Client {private void start() throws Exception {DatagramSocket socket = new DatagramSocket();byte[] sendBuffer = "Hello".getBytes();InetAddress address = InetAddress.getByName("127.0.0.1");// address代表服务器的ip,8888是服务器的端口号DatagramPacket sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, address, 8888);socket.send(sendPacket);// 发送byte[] receiveBuffer = new byte[1024]; DatagramPacket receivePacket = new DatagramPacket(receiveBuffer , receiveBuffer.length); socket.receive(receivePacket); String recvStr = new String(receivePacket.getData(), 0, receivePacket.getLength()); System.out.println(recvStr);//OK socket.close();}public static void main(String[] args) throws Exception {for (int i = 0; i < 10; i++) {new Client().start();}}}
- java UDP/IP
- 【Java TCP/IP Socket】UDP Socket
- Java基础---网络编程 ip udp
- Java-网络编程(IP地址)-(TCP和UDP)-(Socket)-(Udp-发送端)-(Udp-接收端)
- udp+ip头+udp头
- Java TCP/IP协议笔记之UDP 套接字
- 【Java TCP/IP Socket】UDP Socket(含代码)
- 【Java TCP/IP Socket】UDP Socket(含代码)
- Lesson_for_java_day22--java的网络编程(IP、URL、UDP传输)
- 【Java TCP/IP Socket】UDP Socket(含代码)
- 【Java TCP/IP Socket】UDP Socket(含代码)
- 【Java TCP/IP Socket】UDP Socket(含代码)
- 【Java TCP/IP Socket】UDP Socket(含代码)
- Java-Tcp/Ip-CS时间问询UDP应用Demo
- 【Java TCP/IP Socket】UDP Socket(含代码)
- 初识Java TCP/IP Socket-UDP网络编程知识
- 【Java TCP/IP Socket】UDP Socket(含代码)
- 【Java TCP/IP Socket】UDP Socket(含代码)
- xml取值
- C++中 overload 、override、overwrite 之间的区别
- xshell_note
- 达芬奇技术背景和规范
- 利用SecureCRT上传、下载文件(使用sz与rz命令),超实用!
- java UDP/IP
- 我的学习笔记(C#编程中将截断或二进制数据的问题)
- 摄影测量中坐标系的转换
- Hbase API高级特性-计数器
- XML解析实例
- 第十五周项目1-二维数组大折腾
- java编程思想之单例
- Android中的PopupWindow点击外侧区域取消
- jquery个性滚动条插件jquery.mCustomScrollbar.js的使用