UDP是面向非连接的,UDP传输的是数据报只负责传输信息,不保证信息一定收到,虽然安全性不如TCP(面向连接、用Socket进行通信),但是性能较好。
从简单到复杂,首先简单介绍一下怎么利用UDP实现客服端发送消息给服务器端吧:
发送、接受消息过程大概如下:
服务器端:创建DatagramSocket对象用于打开指定端口并监听,然后用创建一个DatagramPacket,利用DatagramSocket中的receive(ds)方法接收数据并放到刚创建的DatagramPacket对象中;
这样就完成了简单的发送,接收过程。
客户端:创建DatagramSocket对象,创建好IP地址和端口号后,利用DatagramSocket中的connect(ip,port)方法和服务端建立连接,然后利用DatagramSocket中的send(dp)方法发送早已准备好的数据。
服务器端代码:
package Socket;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class server {
private DatagramSocket ds = null;
private int Port = 9999;
public server(){
try{
ds = new DatagramSocket(Port);
byte[] data = new byte[255];
DatagramPacket dp = new DatagramPacket(data,data.length);
ds.receive(dp);
String str = new String(dp.getData());
System.out.println(str);
}catch(Exception e){
}
}
public static void main(String[] args){
new server();
}
}
客户端代码:
package Socket;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class client{
private DatagramSocket ds;
private int Port = 9999;
public client(){
try{
ds = new DatagramSocket();
InetAddress address = InetAddress.getByName("Localhost");
ds.connect(address,Port);
String str = "客户端连接";
byte[] data = str.getBytes();
DatagramPacket dp = new DatagramPacket(data,data.length);
ds.send(dp);
}catch(Exception e){
}
}
public static void main(String[] args){
new client();
}
}
现在都了解了UDP是怎么实现发送和接收信息的了,怎样实现客户端和服务器端之间的相互聊天呢?这就需要服务器端和客户端能够自动的读取对方传过来的信息了,接受消息是通过调用receive函数,该函数的特点是如果未收到消息就会死等,这样就容易造成程序的阻塞,解决方法是将读取信息的代码写到专门的线程内,这里用Runnable接口。为了使聊天过程更加清楚易懂,加入GUI。