日期:2014-05-20  浏览次数:20844 次

java如何指定出端口?
Java code
    public void activeSend(SocketAddress addr, byte[] data) throws Exception {
        DatagramPacket pack = new DatagramPacket(data, data.length, addr);
        activeDatagramSocket.send(pack);
        System.out.println("use active send");
    }


如果这样发送的话 最终会从本地的一个 默认端口(操作系统帮你指定一个出端口) 出去到达对方IP

但我现在要指定端口,必须从3030出去.
也就是如果要写一个p2p打洞程序的必须操作: 指定确切的可行方向上的 '洞'

java如何指定出端口?

------解决方案--------------------
SocketAddress是一个抽象类。
public class InetSocketAddress extends SocketAddress
InetSocketAddress 继承了SocketAddress。
InetSocketAddress(InetAddress addr, int port) 构造函数就可以指定端口。
------解决方案--------------------
好厉害, lz写好程序后给我看看, 我也在学习呢
------解决方案--------------------
UDP?
获得这个activeDatagramSocket的时候用下面的构造方法:
DatagramSocket(int port) 
创建数据报套接字并将其绑定到本地主机上的指定端口。
------解决方案--------------------
用这个连服务器:
Socket(String host, int port, InetAddress localAddr, int localPort) 

------解决方案--------------------
探讨

引用:

SocketAddress是一个抽象类。
public class InetSocketAddress extends SocketAddress
InetSocketAddress 继承了SocketAddress。
InetSocketAddress(InetAddress addr, int port) 构造函数就可以指定端口。


……

------解决方案--------------------
探讨

楼上几位...

出端口 和 入端口的概念先搞明白成吗?

计算机 的port 分为出端口和入端口.

你建立 一个 socket server 侦听 8080端口. 随时准备接收其他人的消息. 这个时候 你这个8080叫做入端口.

而别人的IE去访问 你的8080端口是需要从自己的计算机的 xxxx 端口走出去从而到达你的 8080端口

如下:

192.168.……

------解决方案--------------------
冷静!别动气,气大伤肝啊!大家都仔细看看对方的回复!
------解决方案--------------------
搬凳子看看
------解决方案--------------------
探讨

引用:
你认为如果你不指定端口,[C]lient -> [S]erver,难道只有S方才会有端口吗?C方难道不会产生随机端口吗???

巨汗......我都已经明确表示了 :我需要的不是随机端口了...... 而是指定端口, 我都明确表达了拒绝随机.... 你居然还能发出这样的回复来!!!!!!!!!!!!!!!!!!!!!

我再把问题给你发一次:……

------解决方案--------------------
用Socket套接字制定端口
ServerSocket
------解决方案--------------------
DatagramPacket pack = new DatagramPacket(data, data.length, addr);
activeDatagramSocket.send(pack);
System.out.println("use active send");

DatagramPacket是无法直接绑定本地IP和端口的。
DatagramPacket的数据是通过DatagramSocket.send出去的。
要绑定本地的端口和IP只需要调用。
activeDatagramSocket.bind(SocketAddress addr);
这里的SocketAddress就是我1楼的回复。

顺便在发一个JAVADOC给你。
JDK6 JavaDoc:http://download.csdn.net/detail/fainfy/3689670
JDK7 JavaDoc: http://download.csdn.net/detail/fainfy/3605021

顺便我的回复是按照楼主的代码来回复的,我认为没有问题,只是你没有明白而已。
如果提问者是一个有心人,我会直接贴上可用的代码。
------解决方案--------------------
探讨

巨汗......我都已经明确表示了 :我需要的不是随机端口了...... 而是指定端口, 我都明确表达了拒绝随机.... 你居然还能发出这样的回复来!!!!!!!!!!!!!!!!!!!!!
----------------------

你觉得这样说话叫做[装逼]?

那么,请你滚吧

------解决方案--------------------