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();
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
更多java socket udp实例详解。