java Socket UDP实例详解
程序员文章站
2024-03-08 11:51:16
udp编程示例
服务器端:
package socket;
import java.io.ioexception;
import java.n...
udp编程示例
服务器端:
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(); } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!