Java在socket通信时的一个问题

我们知道TCP通信时client会动态分配一个端口与发送给服务器的监听端口。现在我很想知道服务器监听到client之后分配的socket实例是不是还用监听的那个端口。现在... 我们知道TCP通信时client会动态分配一个端口与发送给服务器的监听端口。现在我很想知道服务器监听到client之后分配的socket实例是不是还用监听的那个端口。现在有大神说一,服务器还用这个端口,不过通过客户端的不同,将数据包分开处理。二,在CSDN也问了这个问题,不过回答是服务器程序不会用监听的端口,而是新分配一个端口号给socket实例与客户程序通信。
两种解释都觉得合理,但是只能是其中一个吧,求解释?
展开
 我来答
fuhaiwei
2013-04-11 · TA获得超过3409个赞
知道大有可为答主
回答量:974
采纳率:75%
帮助的人:1373万
展开全部
import java.net.ServerSocket;
import java.net.Socket;
public class SocketDemo {
public static void main(String[] args) {
ThreadUtils.startThread(new MyThread() {
public void run() throws Exception {
ServerSocket server = new ServerSocket(10000);
for (int i = 0; i < 2; i++) {
Socket socket = server.accept();
System.out.printf("服务端(%s)远程端口: %s\n", (i + 1), socket.getPort());
System.out.printf("服务端(%s)本地端口: %s\n", (i + 1), socket.getLocalPort());
}
}
});
ThreadUtils.startThread(new MyThread() {
public void run() throws Exception {
for (int i = 0; i < 2; i++) {
Socket socket = new Socket("localhost", 10000);
ThreadUtils.sleep(100);
System.out.printf("客户端(%s)远程端口: %s\n", (i + 1), socket.getPort());
System.out.printf("客户端(%s)本地端口: %s\n", (i + 1), socket.getLocalPort());
}
}
});
}
public static class ThreadUtils {
public static void startThread(final MyThread myThread) {
new Thread() {
public void run() {
try {
myThread.run();
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
public static void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public interface MyThread {
public void run() throws Exception;
}
}

让代码说话吧,我做的测试,同时连接两个用户的情况下,服务器本地端口仍然是监听的端口。

看来一个端口同时只能有一个监听者,但是可以同时处理多个已连接的连接。

骑车到处逛
2013-04-11 · TA获得超过160个赞
知道小有建树答主
回答量:217
采纳率:0%
帮助的人:121万
展开全部
我通过C#代码试了一下,确定是第一种,server端仍然用原来的端口。
仔细考虑这样也对。因为客户端每次都跟server listen的端口connect,如果server每次accept都再分配一个端口的话,而客户端依然用connect的那个端口去通信,显然就不对了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手柄枪神
2013-04-11 · 一名热爱游戏、乐于分享的老玩家。
手柄枪神
采纳数:144 获赞数:408

向TA提问 私信TA
展开全部
服务器端的端口肯定是固定的 不同的客户端用不同的线程处理 应该是这样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式