c# 编写的C/S 软件通信问题
发布网友
发布时间:2024-10-07 14:58
我来回答
共3个回答
热心网友
时间:2024-11-23 12:06
首先你要确定是不同网段还是不同子网。
不同网段下是可以通讯的,而不同子网就要有一些注意的事项了。
比如,你的 IP是 222.222.222.222 对方的 IP 是 111.111.111.111 那么你们是可以直接通讯的。
但是,还打以上两个 IP 为例,你们两人至少其中之一在子网内,那么就不能通讯了。
问题出在端口映射中。
子网与*的通讯是这样的,子网内发出一个连接请求到*的另一个 IP,如果你本地网关没有特别设置端口映射的话,网关会随机给您映射出一个端口出来,比如,你使用的是 2020端口,那么网关有可能给您映射出来的端口是 4040 端口,那么接收方这时候应该向你* IP 的 4040 端口发送数据才能被你内网的 2020端口接收到。
而如果对方也是内网的话,那就更杯具了,因为接收方还没有在网关上映射端口,而发送方不管向对方 IP 的任何端口发送数据,对方都是接收不到的。
考虑到这种情况,就必须使用服务器来解决了,首先,服务器是*,他打开一个端口来接受连接请求,两个客户端的连接请求都接收到之后,就可以知道连接方的 IP 和映射出来的端口号了。那么 A 想与 B 通讯,A就可以向服务器请求 B的IP 和端口号,然后在向请求来的 IP和端口号发送数据就可以了。
当然,如果不怕耗费服务器性能,直接由服务器进行转发也是可以的。追问那我把服务端放到一个固定ip的服务器上,是不是就不存在这些问题了
追答是的~
服务器那边要通过终端上行的端口号来确定下行的端口号。
热心网友
时间:2024-11-23 12:06
不同网段是无法通信的,非要通信需要中间服务器。
你的client可以不是一个网段,但是两个client网段都必须和server网段能通信。
热心网友
时间:2024-11-23 12:06
请问你的问题解决了没?同求