UDP协议一般应用在“群发信息”的场合,所以它可以利用多线程机制,实现多信息的同步发送。
为了改善代码结构,把一些业务逻辑的动作抽象成方法,并封装成类,这样,基于UDP功能的类就可以在其他应用项目里被轻易的重用。
如果把客户端的所有代码都写在一个文件中,那么代码的功能很有可能都聚集在一个方法里,代码的可维护性将会变得很差。所以专门设计ClientBean类,在其中封装了客户端通讯的一些功能方法,在此基础上,通过UDPClient.java文件,实现UDP客户端的功能。
首先,设计ClientBean类。
public class ClientBean {
private DatagramSocket ds;//描述UDP通讯的DatagramSocket对象
private byte buffer[];//用来封装通讯字符串
private int clientport;//客户端的端口号
private int serverport;//服务器端的端口号
private String content;//通讯内容
private InetAddress ia;//描述通讯地址
public DatagramSocket getDs() {
return ds;
}
public void setDs(DatagramSocket ds) {
this.ds = ds;
}
public byte[] getBuffer() {
return buffer;
}
public void setBuffer(byte[] buffer) {
this.buffer = buffer;
}
public int getClientport() {
return clientport;
}
public void setClientport(int clientport) {
this.clientport = clientport;
}
public int getServerport() {
return serverport;
}
public void setServerport(int serverport) {
this.serverport = serverport;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public InetAddress getIa() {
return ia;
}
public void setIa(InetAddress ia) {
this.ia = ia;
}
public ClientBean() throws SocketException, UnknownHostException {
buffer = new byte[1024];
clientport = 1985;
serverport = 1986;
content = "";
ds = new DatagramSocket(clientport);
ia = InetAddress.getByName("localhost");
}
public void sendToServer() throws IOException{
buffer = content.getBytes();
ds.send(new DatagramPacket(buffer, content.length(), ia, serverport));
}
}
在上述的代码里定义了描述用来实现UDP通讯的DatagramSocket类型对象ds,
描述客户端和服务器端的端口号clientport和serverport,
用于描述通讯信息的buffer和content对象。buffer对象是byte数组类型的,可通过UDP的数据报文传输,而content是String类型的,在应用层面表示用户之间的通讯内容&#