黑马程序员技术交流社区
标题:
关于UDP传输的问题
[打印本页]
作者:
王春蕾
时间:
2014-4-26 10:28
标题:
关于UDP传输的问题
我定义了接收端和发送端两个类,代码如下:
接收端:
package net.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UDPReceiver {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
/*
* 建立UDP的接收端
* 思路:
* 1、必须有UDP的端点,socket
* 2、接收数据,并解析数据
* 3、将数据打印出来,并结束接收动作
*/
System.out.println("UDP接收端开启。。。。");
//1、创建一个UDP的端点。注意:接收端一定要明确具体的端口,否则收不到数据
DatagramSocket ds=new DatagramSocket();
//2、接收数据,一般使用socket服务的动作完成,将数据存储到数据包对象中
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
ds.receive(dp);
//3、通过数据包对象的方法对数据进行解析
String ip=dp.getAddress().getHostAddress();
int port=dp.getPort();
String text=new String(dp.getData(),0,dp.getLength());
System.out.println("ip:"+ip+";port:"+port+";"+text);
ds.close();
System.out.println("UDP接收端关闭");
}
}
复制代码
发送端:
package net.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class UDPSender {
public static void main(String[] args) throws SocketException, IOException {
// TODO Auto-generated method stub
/*
* 需求:创建一个UDP发送端 思路: 1、先创建UDP端点,也就是UDP的socket 2、将数据封装成数据包
* 3、通过UDP的端点将数据包发送出去
*/
System.out.println("UDP发送开始》》》》");
// 1、创建socket
DatagramSocket ds = new DatagramSocket(9527);
// 2、将数据封装成数据包
String str = "UDP发送数据演示";
byte[] buf = str.getBytes();
// 2.1 创建数据包对象
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getByName("localhost"), 10000);
//3、使用UDP的socket服务将数据包发送出去
ds.send(dp);
//4、关闭资源:
ds.close();
System.out.println("《《《UDP发送结束");
}
}
复制代码
接收端的DatagramSocket的9527端口是什么意思啊?不是已经定义了10000端口吗?为什么写9527也可以
接收到?这两个端口有什么区别呢?
作者:
轻语。
时间:
2014-4-26 11:25
DatagramSocket是构造数据报套接字并将其绑定到本地主机上任何可用的端口。 DatagramPacket是 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口。
作者:
轻语。
时间:
2014-4-26 11:26
查阅API文档这两个方法就知道了。
我的理解就是 它们不是一个计算机上的端口。(前提是发送端和接收端不在一个计算机上)
作者:
创造命运
时间:
2014-4-26 22:32
接收端的DatagramSocket的9527端口是什么意思啊?不是已经定义了10000端口吗?为什么写9527也可以接收到?这两个端口有什么区别呢?
第一:接收端的DatagramSocket的9527端口???什么意思,没明白。
//1、创建一个UDP的端点。注意:接收端一定要明确具体的端口,否则收不到数据
DatagramSocket ds=new DatagramSocket();
这是你的代码,在DatagramSocket()里你都没有加上端口嘛。也就是说你没有指定用哪个端口来接收。看你还写了注意,说明你是知道这一点的。可能是失误。
第二:不是已经定义了10000端口吗?为什么写9527也可以接收到? 不会吧,我用自己的代码试了,如果发送端跟接收端所指定的端口号不一样的话,在接收端不可能接收到数据啊。我指的是这两处的端口:DatagramSocket ds = new DatagramSocket(10000);
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("localhost"), 10000);
第三:10000端口跟9527端口没什么区别,只不过是计算机里面的两个不同的端口,仅此而已。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2