赞
踩
UDP上的服务器server与客户client之间的通信过程,如下图所示。
(1)创建DatagramSocket对象并绑定Socket地址。调用java.net.DatagramSocket类的构造方法,构造方法之一是
public DatagramSocket(int port, InetAddress laddr)
port是端口号,laddr是要绑定的本地地址,其类型是InetAddress。下列语句建立一个DatagramSocket对象,并绑定到(port, ip)。
intport=12345;
String ip=“192.168.1.102”;
DatagramSocket s = new DatagramSocket(port,InetAddress.getByName(ip));
(2)准备一个java.net.DatagramPacket对象,用于存放即将接收的数据报。DatagramPacket类的构造方法之一是
public DatagramPacket(byte[] buf,int length)
此构造方法构造一个DatagramPacket对象,用于存放即将接收包,包的长度是length字节。例如
byte[] bufRecv = new byte[1024];
DatagramPacketpackRecv = new DatagramPacket(bufRecv, 1024);
创建一个名为packRecv的DatagramPacket,长度是1024字节。
(3)调用DatagramSocket的receive方法接收数据报,receive方法头是
public void receive(DatagramPacket p)
接收到的包存放在p中。例如
s.receive(packRecv);
packRecv指向接收到的包,包中包含数据,还包含发送方的IP及端口号等信息。可调用DatagramPacket的getData()方法得到接收到的数据部分,调用DatagramPacket的getAddress()方法得到对方地址,调用DatagramPacket的getPort()方法得到对方端口号。
(4)准备一个java.net.DatagramPacket对象,用于存放即将发送的包。使用DatagramPacket类的下列构造方法
public DatagramPacket(byte[] buf, int length, InetAddressaddress,int port)
例如下面语句
byte[] bufSend = “Hello”.getBytes();
DatagramPacketpackSend = new DatagramPacket(bufSend, bufSend.length, InetAddress.getByName(ip),port);
建立了一个名为packSend的DatagramPacket对象,包中的数据是“Hello”的二进制表
示,包的目的Socket是(ip,port)。
(5)调用DatagramSocket的send方法向对方发送数据,send方法头是
public void send(DatagramPacket p)
例如
s.send(packSend);
(6)传输结束,调用DatagramSocket的close()方法,即s.close()。
(1)调用java.net.DatagramSocket构造方法创建DatagramSocket对象,例如,
DatagramSocket s = new DatagramSocket(null);
(2)准备一个java.net.DatagramPacket对象,用于存放即将发送的包。
(3)调用DatagramSocket的send方法向对方发送数据。
(4)准备一个java.net.DatagramPacket对象,用于存放即将接收的包。
(5)调用DatagramSocket的receive方法接收包。
(6)传输结束,调用DatagramSocket的close()方法。
第1部分编写UDP客户和服务程序并运行
本实验建立服务器程序UdpServer.java和UdpClient.java。UdpServer运行后则等待UdpClient请求,UdpClient向UdpServer发送“Hello,world!”,UdpServer接收消息之后将此字符串再发回给UdpClient,UdpClient接收并显示这个消息。
首先进入Dos命令提示符窗口,键入命令
netstat -ano
查看已占用的UDP端口列表。实验程序中UDP服务器使用的端口号不能出现在已占用端口列表中,以确保UDP服务器使用的端口未被使用。
建立一个Java Application项目
打开NetBeans开发环境,在“D:\”盘下建立一个Java Application项目,项目名称是javanetwork,项目所在文件夹是d:\javanetwork。
1.本实验需要在此项目下建立一个名为demo.udp的包,然后在此包下建立服务器程序UdpServer.java,UdpServer运行后则等待客户请求,客户向服务器发送“Hello,world!”,服务器接收之后将此字符串再发回给客户,客户接收并显示这个字符串。参考Java应用程序建立一个UDP服务器的步骤完成编写UdpServer.java,UdpServer开始运行后则等待客户请求。你的UdpServer运行之后等待客户的输出窗口应与下图类似:
2.参考Java应用程序建立一个UDP客户的步骤,在demo.udp包中建立UDP上的客户程序,命名为UdpClient.java。UdpClient向服务器发送“Hello,world!”,服务器接收之后将此字符串再发回给客户,客户接收并显示这个字符串。你的UdpClient运行后输出窗口内容应与如下截图类似:
此时UdpServer输出窗口内容与如下截图类似:
A,B两名同学的电脑一组。
1.打开Wireshark程序,开始抓包;
2.A运行UdpServer, B运行UdpCient;
3.程序运行结束后停止抓包。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。