UDP实例(只区分发送端和接受端,不分客户端和服务器端)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
但其实这个时候是不能进行通讯的,虽然这个时候DatagramSocket ds = new DatagramSocket();//这时候是有数字标识的,是系统给 分配的,但是具体的标识是多少是不确定的,所以就没有办法通信 所以改成 package sr;
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress;
} catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace();
}
} /** * 定义一个UDP的接收端 *1.建立udp socket服务,使用DatagramSocket对象,通常会监听一个接口,就是给这个数据接收端定义一个数字标识 * 方便于明确哪些数据过来可以被该应用程序接受并处理 2.定义数据包,存储数据 3.通过服务的receive方法将受到的数据存入数据包中,存在dt中了,不是ds中 4.通过数据包的方法获取其中的数据,包含地址,端口,数据 5.关闭资源
/** * 需求: 使用UDP协议,传送一段数据 步骤 1.建立udp socket服务,建立端点 2.确定数据,并使用DatagramPacket封装数据 * 3.使用socket服务,使用send方法,将数据包发送出去 4.关闭资源 * * @author xiaoxiongdeliwu * */ public class UPDDemo {
//这句不能往while里面放,循环回来的时候,就变成两个服务用一个端口,就会出现绑定异常
// 2.定义数据包,存储数据 byte[] buf = new byte[1024]; DatagramPacket dt = new DatagramPacket(buf, buf.length);// 这个是用于接受的函数 // 3.通过服务的receive方法将受到的数据存入数据包中,存在dt中了,不是ds中 ds.receive(dt); // 4.通过数据包的方法获取其中的数据,包含地址,端口,数据 String ip = dt.getAddress().getHostAddress(); int port = dt.getPort(); String data = new String(dt.getData(), 0, dt.getLength());// 由于获取的是字节数组, // 所以要将字节数组变为字符串输出,但是不能将1024 都输出,所以就从0开始,到dt.length()结束 System.out.println(ip + "....." + port + "....." + data); //5.关闭资源

//这句不能往while里面放,循环回来的时候,就变成两个服务用一个端口,就会出现绑பைடு நூலகம்异常
// 2.定义数据包,存储数据 byte[] buf = new byte[1024]; DatagramPacket dt = new DatagramPacket(buf, buf.length);// 这个是用于接受的函数 // 3.通过服务的receive方法将受到的数据存入数据包中,存在dt中了,不是ds中 ds.receive(dt); // 4.通过数据包的方法获取其中的数据,包含地址,端口,数据 String ip = dt.getAddress().getHostAddress(); int port = dt.getPort(); String data = new String(dt.getData(), 0, dt.getLength());// 由于获取的是字节数组, // 所以要将字节数组变为字符串输出,但是不能将1024 都输出,所以就从0开始,到dt.length()结束 System.out.println(ip + "....." + port + "....." + data); //5.关闭资源 ds.close(); } } } 打开的时候,会遇到Windows防火墙 receive() 方法是阻塞式方法。没有数据的时候,就会等待,当有数据发过来的时候,才会notify 要注意系统会给发送端也随机定义一个数字标识,然后输出
public static void main(String[] args) {
try { // 1.建立udp socket服务,使用DatagramSocket对象 DatagramSocket ds = new DatagramSocket(); // 2.确定数据,并封装数据包 byte[] buf = "udp ceshi".getBytes(); DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("10.107.10.138"), 10000); // 3.通过socket服务,使用send方法,将数据包发送出去 ds.send(dp); // 4.关闭资源 ds.close();
public static void main(String[] args) {
try { // 1.建立udp socket服务,使用DatagramSocket对象 DatagramSocket ds = new DatagramSocket(); // 2.确定数据,并封装数据包 byte[] buf = "udp ceshi".getBytes(); DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("10.107.10.138"), 10000); // 3.通过socket服务,使用send方法,将数据包发送出去 ds.send(dp); // 4.关闭资源 ds.close();
UDP实例(只区分发送端和接受端,不分客户端和服务器端)
package sr;
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress;
/** * 需求: 使用UDP协议,传送一段数据 步骤 1.建立udp socket服务,建立端点 2.确定数据,并使用DatagramPacket封装数据 * 3.使用socket服务,使用send方法,将数据包发送出去 4.关闭资源 * * @author xiaoxiongdeliwu * */ public class UPDDemo {
*/ class su { public static void main(String[] args) { // 1.建立udp socket服务,使用DatagramSocket对象,通常会监听一个接口,就是给这个数据接收端定义一个数字标识 DatagramSocket ds = new DatagramSocket(10000);//这时候是有数字标识的,此时要和发送端的端口一样,否则接收不到数
} catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace();
}
}
class su { public static void main(String[] args) { // 1.建立udp socket服务,使用DatagramSocket对象 DatagramSocket ds = new DatagramSocket();//这时候是有数字标识的,
相关文档
最新文档