关于C# socket传输中的连接问题

由于我初次编写网络传输这一块的代码,中间一些传输上这几道连接的地方不太明白。
现在我遇到的情景是这样的:
1.我用TCP协议传输文件至服务器,
2.客户端第一次发送文件信息等待回应,
3.服务器接收到消息后返回状态,
4.本地收到状态后开始传文件并等待传输完成回应,
5.传输完成后服务器发送完成状态回来客户端接收到整个过程就完成了。
现有服务器一台,公网IP,可以直接从任何电脑访问的那种,
我现在在服务器上写好了监听,监听收到的消息并判断,然后发送状态返回。
按我的理解就是要发送到对方的IP和端口上去就可以了(当然对方也要开启监听)
但是我的客户端网络很有可能不是公网IP(基本都不是),这样又要经过NAT这一层了,
客户端发送的消息服务器是已经收得到了,但是现在服务器怎么让客户端收到状态回应呢?
我选择的是让服务器把消息发送给RemoteEndPoint,那么客户端应该监听那个IP呢?

做了这么久的 Socket 通讯,通讯两方一般都是公网、或者两者都是局域网。
你的客户端为什么不是公网 IP 呢?这样的通讯稳定性好吗?

客户端主动连接服务器端,然后保持住长连接即可。如果两个客户端通讯,通过服务器转发。

不用关心,那是透明的。只要服务器维护这个长连接,那么它随时可以向客户端返回数据。再不懂找一本书看看,或者 google 下 "tcp 长连接"