求VC++6.0的基于MFC对话框的Socket通讯的代码,主要是完成服务器和客户端的发送和接受数据。

求VC++6.0的基于MFC对话框的Socket通讯的代码,主要是完成服务器和客户端的发送和接受数据。,第1张

两个错误和一点建议。

● 错误1 是按照题主的在问题里所描述的设计,网关服务器根本没有维持长连接的必要,只需要转发消息给业务服务器后跟 Client 的连接就可以断开了,剩下的都是业务服务器跟 Client 直接通信了。不知题主还有什么关于维持长连接的必要没有在问题里说明?

● 错误2 是如果维持长连接了,把 Client 的端口号转发给业务服务器了有什么用?Client 的这个端口正在跟网关服务器通信呢,业务服务器怎么可能通过这个端口跟 Client 建立连接?难道同一个端口还能被多个 Socket 占用吗?

● 建议 要么改为业务服务器不跟 Client 通信,还是经由网关服务器中转进行;要么业务服务器就需要跟 Client 进行“打洞”(Hole Punching)。

先说为什么要“打洞”。对于处在同一子网下的计算机还好说,假如 Client 在子网 A 下,且 A 下有多态接入设备(最常见的就是走路由了),那么 A 子网下的所有计算对于你的服务器来说 IP 都是一样的,所以你要想要穿过路由直接跟 A 子网下的某台计算机建立连接,就必须要先“打洞”。

再推荐几篇有关 C# 打洞(Hole Punching)的资料:
>打横杠是因为那个方法已经过时了现在已经不怎么用了。。。
Socket 服务器: 1先创建 ServerSocket ss = new ServerSocket(端口号)
2 接收请求 Socket s = ssaccept()
3接收消息 先读后写BufferedReader in = new BufferedReader(
new InputStreamReader(sgetInputStream(),"utf-8"));
String str = inreadLine(); PrintWriter out = new PrintWriter
( new BufferedWriter( new OutputStreamWriter(sgetOutputStream())),true);
outprintln("服务器信息");
4关闭流outclose();
inclose();
isclose();
客户端 1、通过IP地址和端口实例化Socket,请求连接服务器
2、获取Socket上的流以进行读写。
3、对流包装进BufferedReader/PrintWriters实例
4、关闭打开的流


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10864055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存