Java Socket编程实例(二)- UDP基本使用
一.服务端代码:
importjava.io.*;
importjava.net.*;
publicclassUDPEchoServer{
privatestaticfinalintECHOMAX=255;//Maximumsizeofechodatagram
publicstaticvoidmain(String[]args)throwsIOException{
intservPort=5500;//Serverport
DatagramSocketsocket=newDatagramSocket(servPort);
DatagramPacketpacket=newDatagramPacket(newbyte[ECHOMAX],ECHOMAX);
while(true){//Runforever,receivingandechoingdatagrams
socket.receive(packet);//Receivepacketfromclient
System.out.println("Handlingclientat"+packet.getAddress().getHostAddress()+"onport"+packet.getPort());
socket.send(packet);//Sendthesamepacketbacktoclient
packet.setLength(ECHOMAX);//Resetlengthtoavoidshrinkingbuffer
}
/*NOTREACHED*/
}
}
二.客户端代码:
importjava.net.*;
importjava.io.*;
publicclassUDPEchoClientTimeout{
privatestaticfinalintTIMEOUT=3000;//Resendtimeout(milliseconds)
privatestaticfinalintMAXTRIES=5;//Maximumretransmissions
publicstaticvoidmain(String[]args)throwsIOException{
InetAddressserverAddress=InetAddress.getByName("127.0.0.1");//Serveraddress
intservPort=5500;//Serverport
//ConverttheargumentStringtobytesusingthedefaultencoding
byte[]bytesToSend="Hi,World".getBytes();
DatagramSocketsocket=newDatagramSocket();
socket.setSoTimeout(TIMEOUT);//Maximumreceiveblockingtime(milliseconds)
//Sendingpacket
DatagramPacketsendPacket=newDatagramPacket(bytesToSend,bytesToSend.length,serverAddress,servPort);
DatagramPacketreceivePacket=//Receivingpacket
newDatagramPacket(newbyte[bytesToSend.length],bytesToSend.length);
inttries=0;//Packetsmaybelost,sowehavetokeeptrying
booleanreceivedResponse=false;
do{
socket.send(sendPacket);//Sendtheechostring
try{
socket.receive(receivePacket);//Attemptechoreplyreception
if(!receivePacket.getAddress().equals(serverAddress)){//Check
//source
thrownewIOException("Receivedpacketfromanunknownsource");
}
receivedResponse=true;
}catch(InterruptedIOExceptione){//Wedidnotgetanything
tries+=1;
System.out.println("Timedout,"+(MAXTRIES-tries)+"moretries...");
}
}while((!receivedResponse)&&(tries<MAXTRIES));
if(receivedResponse){
System.out.println("Received:"+newString(receivePacket.getData()));
}else{
System.out.println("Noresponse--givingup.");
}
socket.close();
}
}
上述代码的UDP服务端是单线程,一次只能服务一个客户端。
以上就是本文的全部内容,查看更多Java的语法,大家可以关注:《ThinkinginJava中文手册》、《JDK1.7参考手册官方英文版》、《JDK1.6APIjava中文参考手册》、《JDK1.5APIjava中文参考手册》,也希望大家多多支持毛票票。
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下