黑马程序员技术交流社区
标题:
Socket获取的端口和10000端口有什么区 他们都是端口
[打印本页]
作者:
赵亚威
时间:
2013-4-2 12:35
标题:
Socket获取的端口和10000端口有什么区 他们都是端口
本帖最后由 赵亚威 于 2013-4-2 16:17 编辑
public class SocketDemo {
/**
* @param args
*/
public static void main(String[] args) {
DatagramSocket ds = null;
try {
ds=new DatagramSocket();
byte[] buf="wo shi yi ge shu zu".getBytes();
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10000);
ds.send(dp);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(ds!=null)
ds.close();
}
}
}
class SocketRecev{
public static void main(String[] args){
DatagramSocket ds=null;
try {
ds=new DatagramSocket(10000);
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
ds.receive(dp);
String ip=dp.getAddress().getHostAddress();
String data=new String(dp.getData(),0,dp.getLength());
int port=dp.getPort();
System.out.println(ip+":"+data+":"+port);//port为什么不是10000
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(ds!=null)
ds.close();
}
}
}
运行后的结果:
127.0.0.1:wo shi yi ge shu zu:54397
作者:
黑马李超
时间:
2013-4-2 12:49
这个返回的port是客户端的端口 不是服务端的
作者:
我手心里的宝
时间:
2013-4-2 12:54
在这里你返回的是客户端的端口,客户端端口你不指定的时候,它是一个系统随机分配
而且每次分配的都不一样
你说指定,那是指定服务端的端口
作者:
齐静
时间:
2013-4-2 13:20
一个客户端,一个服务器端
作者:
熊永标
时间:
2013-4-2 14:55
10000这个端口号用于接收传过来的数据包,当DatagramSocket收到数据包后,填充DatagramPacket数据包,从这个数据包中获取的端口是远程主机发送数据的端口.所以获取的端口当然是不一样的.
作者:
随便
时间:
2013-4-2 15:19
本帖最后由 邓宫财 于 2013-4-2 15:21 编辑
public class SocketDemo {
public static void main(String[] args) {
DatagramSocket ds = null;
try {
//这里需要指定发送端的端口号,不然就是随机的。
ds = new DatagramSocket(10583);
byte[] buf = "wo shi yi ge shu zu".getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getByName("127.0.0.1"), 10000);//这里的10000是指发送到接收端的端口号
ds.send(dp);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ds != null)
ds.close();
}
}
}
复制代码
修改了你的发送端,发送端如果不指定端口的话,会随机分配一个。
这里我指定了10583,结果会打印出
127.0.0.1:wo shi yi ge shu zu:10583
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getByName("127.0.0.1"), 10000);//这里的10000是指发送到接收端的端口号
而不是你认为的服务端的端口号。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2