java Socket UDP实例详解
UDP编程示例
服务器端:
packagesocket;
importjava.io.IOException;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.SocketException;
publicclassUDPServer{
publicstaticvoidmain(String[]args)throwsIOException{
byte[]buf=newbyte[1024];
DatagramPacketdp=newDatagramPacket(buf,buf.length);//声明一个用来接收数据的“包裹”
DatagramSocketds=newDatagramSocket(5678);//指定的是UDP中的端口号5678,在TCP中,还有另外一个端口号为5678的端口
while(true){
ds.receive(dp);//阻塞式的
System.out.println(newString(buf,0,dp.getLength()));//dp中获取的数据的长度
}
}
}
客户端:
packagesocket;
importjava.io.IOException;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.InetSocketAddress;
importjava.net.SocketException;
publicclassUDPClient{
publicstaticvoidmain(String[]args)throwsIOException{
byte[]buf=newString("Hello").getBytes();
//UDP是无连接的,所以要在发送的数据包裹中指定要发送到的ip:port
DatagramPacketdp=newDatagramPacket(buf,buf.length,newInetSocketAddress("127.0.0.1",5678));
DatagramSocketds=newDatagramSocket(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流类型,如下:
服务器端:
packagesocket;
importjava.io.ByteArrayInputStream;
importjava.io.ByteArrayOutputStream;
importjava.io.DataInputStream;
importjava.io.DataOutputStream;
importjava.io.IOException;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.SocketException;
publicclassUDPServer{
publicstaticvoidmain(String[]args)throwsIOException{
byte[]buf=newbyte[1024];
DatagramPacketdp=newDatagramPacket(buf,buf.length);
DatagramSocketds=newDatagramSocket(5678);
ByteArrayInputStreambais=null;
DataInputStreamdos=null;
while(true){
ds.receive(dp);
bais=newByteArrayInputStream(buf);
dos=newDataInputStream(bais);
System.out.println(dos.readLong());
}
}
}
客户端:
packagesocket;
importjava.io.ByteArrayOutputStream;
importjava.io.DataOutputStream;
importjava.io.IOException;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.InetSocketAddress;
importjava.net.SocketException;
publicclassUDPClient{
publicstaticvoidmain(String[]args)throwsIOException{
byte[]buf=null;
longl=100000L;
ByteArrayOutputStreambaos=newByteArrayOutputStream();
DataOutputStreamdos=newDataOutputStream(baos);
dos.writeLong(l);
buf=baos.toByteArray();
DatagramPacketdp=newDatagramPacket(buf,buf.length,newInetSocketAddress("127.0.0.1",5678));
DatagramSocketds=newDatagramSocket(9999);
ds.send(dp);
ds.close();
dos.close();
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!