首页 > 开发 > Java > 正文

java Socket UDP实例详解

2024-07-13 10:03:35
字体:
来源:转载
供稿:网友

UDP编程示例

服务器端:

java/172704.html">java;">package socket;  import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException;  public class UDPServer {       public static void main(String[] args) throws IOException {     byte[] buf = new byte[1024];     DatagramPacket dp = new DatagramPacket(buf, buf.length);//声明一个用来接收数据的“包裹”     DatagramSocket ds = new DatagramSocket(5678);//指定的是UDP中的端口号5678,在TCP中,还有另外一个端口号为5678的端口     while(true){       ds.receive(dp); //阻塞式的       System.out.println(new String(buf,0,dp.getLength()));//dp中获取的数据的长度     }    }  } 

客户端:

package socket;  import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException;  public class UDPClient {    public static void main(String[] args) throws IOException {     byte[] buf = new String("Hello").getBytes();     //UDP是无连接的,所以要在发送的数据包裹中指定要发送到的ip:port     DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1", 5678));     DatagramSocket ds = new DatagramSocket(9999); //指明发送端的端口号     ds.send(dp);     ds.close();   }  } 

说明:

1. 严格意义上来讲,UDP没有server和client之分,不像TCP中有ServerSocket和Socket,UDP中只有DatagramSocket。

2. UDP和TCP的端口是分开的,例如UDP有一个端口号为5678的端口,TCP也有一个端口号为5678的端口。

3. UDP是无连接的,所以要在发送的数据包裹中指定要发送到的ip:port。

4. 如果要发送long、int等类型的数据,则需要使用到ByteArrayOutputStream、DataOutputStream、ByteArrayInputStream、ByteArrayInputStream流类型,如下:

服务器端:

package socket;  import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException;  public class UDPServer {       public static void main(String[] args) throws IOException {     byte[] buf = new byte[1024];     DatagramPacket dp = new DatagramPacket(buf, buf.length);     DatagramSocket ds = new DatagramSocket(5678);     ByteArrayInputStream bais = null;     DataInputStream dos = null;     while(true){       ds.receive(dp);        bais = new ByteArrayInputStream(buf);       dos = new DataInputStream(bais);       System.out.println(dos.readLong());     }    }  } 

客户端:

package socket;  import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException;  public class UDPClient {    public static void main(String[] args) throws IOException {     byte[] buf = null;     long l = 100000L;     ByteArrayOutputStream baos = new ByteArrayOutputStream();     DataOutputStream dos = new DataOutputStream(baos);     dos.writeLong(l);     buf = baos.toByteArray();     DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1", 5678));     DatagramSocket ds = new DatagramSocket(9999);      ds.send(dp);     ds.close();         dos.close();   }  } 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表