服务端ServerSocket编程问题

诺晨 发布于 2014/10/17 17:01
阅读 289
收藏 1

问题描述:

    在服务端创建ServerSocket,并监听8080端口。当客户端请求到达时,ServerSocket的accept方法会返回一个新Socket,用来和客户端通信。

    现在问题来了。

    

    如图所示,Client1 连接 ServerSocket 时,新生成了 Socket1,其本地端口为 8080;Client2 连接 ServerSocket 时,新生成了 Socket2,其本地端口也是 8080,

    那么,当Client1、Client2 与 Socket1、Socket2通信时,由于 Socket1 和 Socket2 的源端口都为 8080,Client1 的信息如何确认要发到 Socket1,同理 Client2 如何确定发到 Socket2 呢?

加载中
0
不日小鸡
本地生成的端口不可能是同一个
不日小鸡
回复 @诺晨 : 哥错了。。。还以为是客户端端口。socket可以根据client的IP和端口来进行区分
诺晨
诺晨
回复 @不日小鸡 : 打印了,确实是和监听端口一样。想象一下,假如服务器的并发数达到几万以上,但是端口就只有65535个,服务器怎么够端口分配?
不日小鸡
回复 @诺晨 : 你可以自己写个程序然后看服务端的端口情况,会发现多出几个端口
诺晨
诺晨
服务器accept方法产生的socket,是和监听端口一样的。
0
C
CrS

TCP连接(网络编程中被抽象为socket)是两端ip和端口组成的“四元组”,这里的两个socket虽然在服务端的ip和端口相同,但是客户端的ip端口都不同。操作系统的网络内核可以根据TCP报头的内容,区分数据包属于哪个TCP连接。

这些算是网络基础知识了,建议看看《TCP/IP详解》

诺晨
诺晨
回复 @落叶飞花 : 正在看,希望有所收获!
落叶飞花
落叶飞花
年轻人,计算机网络基础太差,去看看吧
C
CrS
回复 @诺晨 : 那还不是根据TCP包头中的客户端ip和port区分,更何况你这个例子中客户端都不是一台主机。TCP协议要先去了解一下少年
诺晨
诺晨
服务器可以根据客户端的IP和端口进行区分。但是accept产生的socket本地IP和端口都一样,客户端怎么区分?
0
嘻哈开发者
嘻哈开发者
8080是服务的监听端口,不是client的端口,client的端口是临时生成的
不日小鸡
回复 @诺晨 : 服务器产生的socket端口是重新生成的一个另外端口
嘻哈开发者
嘻哈开发者
回复 @诺晨 : 不可能吧,服务端的socket端口是临时分配的,你可以打印出来看看
诺晨
诺晨
是的。我的困惑是:服务端accept方法产生的socket,和监听端口一样。那客户端怎么区分它们?
0
ksfzhaohui
ksfzhaohui

一个TCP连接由 clientIP:clientPort  --- serverIP:serverPort确定.
也就是只要clientIP:clientPort 不同, 相同的serverIP:serverPort可以建立很多的连接.
还有socket只是用来通讯的,更多的区分应该是在应用层协议包里面

诺晨
诺晨
说得很对!
0
L3ve
L3ve
S1就是C1在server端的一个实例,S2也一样....S1只能和C1通信的说
0
semieye
semieye
连接通道是两条链路,怎么会区分不了?!
0
yb123
yb123
这个你只在发送的时候规定发送格式然后好通过格式判断是谁发送的
返回顶部
顶部