UDP简单服务端客户端代码示例
UDP的理论不再多说,我这里直接给出一个关于UDP的HelloWorld程序,代码明了,希望对刚入门的学生有所帮助!
当然,实际上,在这块我也刚入门!
首先写服务端代码,服务端邦定本地的IP和端口来监听访问:
packageudp;
importjava.io.IOException;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.InetSocketAddress;
/**
*UDP服务类
*/
publicclassUdpServerSocket{
privatebyte[]buffer=newbyte[1024];
privatestaticDatagramSocketds=null;
privateDatagramPacketpacket=null;
privateInetSocketAddresssocketAddress=null;
/**
*测试方法
*/
publicstaticvoidmain(String[]args)throwsException{
StringserverHost="127.0.0.1";
intserverPort=3344;
UdpServerSocketudpServerSocket=newUdpServerSocket(serverHost,
serverPort);
while(true){
udpServerSocket.receive();
udpServerSocket.response("你好,吃了吗!");
}
}
/**
*构造函数,绑定主机和端口
*/
publicUdpServerSocket(Stringhost,intport)throwsException{
socketAddress=newInetSocketAddress(host,port);
ds=newDatagramSocket(socketAddress);
System.out.println("服务端启动!");
}
/**
*接收数据包,该方法会造成线程阻塞
*/
publicfinalStringreceive()throwsIOException{
packet=newDatagramPacket(buffer,buffer.length);
ds.receive(packet);
Stringinfo=newString(packet.getData(),0,packet.getLength());
System.out.println("接收信息:"+info);
returninfo;
}
/**
*将响应包发送给请求端
*/
publicfinalvoidresponse(Stringinfo)throwsIOException{
System.out.println("客户端地址:"+packet.getAddress().getHostAddress()
+",端口:"+packet.getPort());
DatagramPacketdp=newDatagramPacket(buffer,buffer.length,packet
.getAddress(),packet.getPort());
dp.setData(info.getBytes());
ds.send(dp);
}
}
运行后提示服务端运行成功,程序开始监听端口,接收方法堵塞,当有访问时才会向下进行!
我们写客户端进行访问,看到网上的例子都是直接创建了DatagramSocket对象,而其实自己都不知道自己使用的端口是那个,这里我创建时会指定自己邦定的端口,其实很简单,就是初始化该对象时传递一个端口参数。
这里你访问客户端时客户端会打印你的IP和端口!
看一看客户端代码:
packageudp;
importjava.io.*;
importjava.net.*;
/**
*UDP客户端程序,用于对服务端发送数据,并接收服务端的回应信息
*/
publicclassUdpClientSocket{
privatebyte[]buffer=newbyte[1024];
privatestaticDatagramSocketds=null;
/**
*测试客户端发包和接收回应信息的方法
*/
publicstaticvoidmain(String[]args)throwsException{
UdpClientSocketclient=newUdpClientSocket();
StringserverHost="127.0.0.1";
intserverPort=3344;
client.send(serverHost,serverPort,("你好,亲爱的!").getBytes());
byte[]bt=client.receive();
System.out.println("服务端回应数据:"+newString(bt));
//关闭连接
try{
ds.close();
}catch(Exceptionex){
ex.printStackTrace();
}
}
/**
*构造函数,创建UDP客户端
*/
publicUdpClientSocket()throwsException{
ds=newDatagramSocket(8899);//邦定本地端口作为客户端
}
/**
*向指定的服务端发送数据信息
*/
publicfinalvoidsend(finalStringhost,finalintport,
finalbyte[]bytes)throwsIOException{
DatagramPacketdp=newDatagramPacket(bytes,bytes.length,InetAddress.getByName(host),port);
ds.send(dp);
}
/**
*接收从指定的服务端发回的数据
*/
publicfinalbyte[]receive()
throwsException{
DatagramPacketdp=newDatagramPacket(buffer,buffer.length);
ds.receive(dp);
byte[]data=newbyte[dp.getLength()];
System.arraycopy(dp.getData(),0,data,0,dp.getLength());
returndata;
}
}
直接运行程序看效果!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。