实时错误'10038,描术符不是一套接字

时间:2021-04-03 10:57:05
一个文件传输的程序,TCP/IP协义,C/S结构
假设:客户端1为C1,客户端2为C2,服务器为S

传统的文件输程序,C1直接向C2发出连接请求。当C2侦听到C1的请求后就建立1对1的连接。但是如果C2的客户端是通过路由上网的,C1是没法找到C2的的侦听,除非C2的路由做了端口映谢。

现在我把程序结构改成C/S结构
前提条件是C1,C2的另一个端口已和S服务器建立了独立的连接
当C1的另一个端口向S请发出连接请求,S得到侦听到requestID值,并把requestID值转发到C2,C2接到转发的requestID值时建立连接。但C2电脑提示:"实时错误'10038,描术符不是一套接字"。


为什么会这样,难道侦听到的requestID值,转发到另一台工作站再建连接是不行的?

6 个解决方案

#1


requestID只能在同一台机器上有效吧...其实那个ID我猜测就是一个socket的handler来的,你不能把一台机器的socket handler传到另一台机器然后还指望它能用啊

#2


requestID只能在同一台机器上有效吧...

我发现requestID这个值,只能在同一个主程序里调用才可以,如果转到另一个主程序里,就失效了。

看来要实现文件传输,不受侦听的控制,只可以去处理路由的端口映射这方向做手脚了

#3


你的问题是典型的NAT穿透问题,你如果有兴趣可以去找下NAT穿透的东西,如果没有兴趣的话你就使用那个服务器S作为信息转发的中继吧。

#4


ding

#5


该回复于2010-07-02 14:41:38被版主删除

#6


这个问题,可能只可以使用
典型的NAT穿透,来解决了

#1


requestID只能在同一台机器上有效吧...其实那个ID我猜测就是一个socket的handler来的,你不能把一台机器的socket handler传到另一台机器然后还指望它能用啊

#2


requestID只能在同一台机器上有效吧...

我发现requestID这个值,只能在同一个主程序里调用才可以,如果转到另一个主程序里,就失效了。

看来要实现文件传输,不受侦听的控制,只可以去处理路由的端口映射这方向做手脚了

#3


你的问题是典型的NAT穿透问题,你如果有兴趣可以去找下NAT穿透的东西,如果没有兴趣的话你就使用那个服务器S作为信息转发的中继吧。

#4


ding

#5


该回复于2010-07-02 14:41:38被版主删除

#6


这个问题,可能只可以使用
典型的NAT穿透,来解决了