UDP提供了更快的但不可靠的网络信息传输,使用UDP传递数据时,用户无法知道数据能否正确的到达主机,也不能确定到达的顺序与发送时的顺序是否相同。是一种不可靠传输。进行UDP传递数据时先将数据打包成数据包,然后再发送此数据包,接受亦然,接受他方发过来的数据包,再转换为String型查看。直接上代码吗,具体的解释都在注释里了,非常详细了!
以下内容是一个服务端与一个客户端的通信
服务端:
package UDP;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class server {
public static void main (String args[]) {
DatagramSocket serversocket;
try {
serversocket=new DatagramSocket(6000);创建绑定本地指定的端口套接字
byte[] recBuf=new byte[100];//recBuf为传入数据包的缓冲区
//接受的是数据包格式
DatagramPacket recvPacket=new DatagramPacket(recBuf, recBuf.length);
serversocket.receive(recvPacket);//接受数据库包
//将数据包格式换为String类型用于输出
String recStr=new String(recvPacket.getData(), 0,recvPacket.getLength());
// System.out.println("hello"+recStr);//输出
int port = recvPacket.getPort();//获得到客户端的端口//这是通过客户端的数据包中的获取到客户端的端口
// System.out.println(port);
InetAddress address= recvPacket.getAddress();//得到ip地址
String sendStr="服务器发送的信息";//发送的信息
byte[] sendBuf;//创建字节数组
sendBuf=sendStr.getBytes();//以字节数组形式发出
DatagramPacket sendPacket=new DatagramPacket(sendBuf, sendBuf.length,address,port);
serversocket.send(sendPacket);//发送
serversocket.close();//关闭连接
} catch (Exception e) {
// TODO: handle exception
}
}
}
客户端
package UDP;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class client {
public static void main(String[] args) {
// TODO Auto-generated method stub
DatagramSocket clientsocket;
try {
clientsocket=new DatagramSocket();//创建套接字对象
String sendStr="你好我是客户机";
byte[] sendBuf;
sendBuf=sendStr.getBytes();//String类型转换为字节型
InetAddress addr =InetAddress.getByName("127.0.0.1");
int port =6000;//端口
//以数据包的形式发送出去
DatagramPacket sendPacket=new DatagramPacket(sendBuf, sendBuf.length,addr,port);
clientsocket.send(sendPacket);//发送
byte[] recvBuf=new byte[100];//存放从服务端接收的字节
DatagramPacket recPacket=new DatagramPacket(recvBuf, recvBuf.length);//指定接受长度的字节
String recStr =new String(recvBuf,0,recPacket.getLength());//再转换成String,用于输出道控制台
System.out.println("收到"+recStr);//输出到控制台
clientsocket.close();//关闭
} catch (Exception e) {
// TODO: handle exception
}
}
}