您的位置:首页 > 其它

UDP通讯:服务器与客户端

2010-01-10 17:00 429 查看
ava
UDP通信(DatagramPacket类、DatagramSocket类、InetAddress类)

一、
DatagramPacket类:


如果把DatagramSocket比作创建的港口码头,那么DatagramPacket就是发送和接收数据的集装箱。

构造函数:一个用来接收数据,一个用来发送数据
public DatagramPacket(byte[] buf,int length)
//接收数据

构造 DatagramPacket 用来接收长度为 ilength 的包。
public DatagramPacket(byte[] buf,int
length,InetAddress address,int port)

构造数据报文包用来把长度为 ilength 的包传送到指定宿主的指定的端口号。

getAddress()       返回接收或发送此数据报文的机器的 IP 地址。

getData()        返回接收的数据或发送出的数据。

getLength()      返回发送出的或接收到的数据的长度。

getPort()       返回接收或发送该数据报文的远程主机端口号。

二、DatagramSocket类



此类表示用来发送和接收数据报包的套接字。 数据报套接字是包投递服务的发送或接收点。

DatagramSocket(int port)     创建数据报套接字并将其绑定到本地主机上的指定端口。

DatagramSocket(int port, InetAddress laddr)     创建数据报套接字,将其绑定到指定的本地地址。

receive(DatagramPacket p)             从此套接字接收数据报包。

void send(DatagramPacket p)         从此套接字发送数据报包。

bind(SocketAddress addr)              将此 DatagramSocket 绑定到特定的地址和端口。

void close()              关闭此数据报套接字。

void connect(InetAddress address, int port)              将套接字连接到此套接字的远程地址。

void connect(SocketAddress addr)              将此套接字连接到远程套接字地址(IP 地址 + 端口号)。

void disconnect()              断开套接字的连接。

getInetAddress()              返回此套接字连接的地址。

InetAddress getLocalAddress()              获取套接字绑定的本地地址。

三、InetAddress类



InetAddress用于表示计算机IP地址的一个类,而在日常应用中的IP地址用"192.168.0.1",

"WWW.it315.org

"等字符串格式表示的。

getByName方法

getHostAddress方法

 

三、示例



 1、客户端



package iism.udp.client;
import java.io.*;
import java.net.*;
public class UdpHeartBeatClient {
private DatagramSocket cli;
private DatagramPacket pac;
private byte sb[];
private String sen;
public UdpHeartBeatClient() {
Init();
}
public void Init() {

//		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");

try {
// 指定端口号,避免与其他应用程序发生冲突
cli = new DatagramSocket(2001);
sb = new byte[1024];
String a[]=new String[]{"33070421100048","123456783","123456784","123456782","123456785"};
for(int i=0;i<5;i++){
sen = a[i];
sb = sen.getBytes();
pac = new DatagramPacket(sb, sb.length, InetAddress.getByName("127.0.0.1"), 2000);
cli.send(pac);
}
cli.close();//关闭连接
} catch (SocketException se) {
se.printStackTrace();
} catch (IOException ie) {
ie.printStackTrace();
}
}
public static void main(String args[]) {
new UdpHeartBeatClient();
}
}


客户端向服务器(端口:2000)发送数据

2、服务器



import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class HeartBeat{
private DatagramSocket ser;
private DatagramPacket pac;
private byte rb[];
private String rev;

try {
ser = new DatagramSocket(2000);
rb = new byte[1024];
pac = new DatagramPacket(rb, rb.length);
rev = "";
while(true){
ser.receive(pac);//监听,客户端是否有数据发送过来
//指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点
rev = new String(rb, 0, pac.getLength());
System.out.println(rev );
}

} catch (Exception e) {
e.printStackTrace();
}
} 


接收从客户端发过来的数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息