[MFC][原创]回答若干socket通信问题

1、socket通信实现方法主要有哪些,为什么在网上很少看到封装很好的类,可以让不怎么懂socket通信的使用一个封装类吗。

答:就本人理解有两种2方法,一种阻塞式,另一种是非阻塞式的。其实socket完全可以封装成一个类,让不懂socket的类调用,为什么这么肯定?本人已经封装出来一套非阻塞式socket服务器和客户端类,一个服务器只要几句代码就可以完成开启关闭和接收发送数据,当然接收数据用的回调函数,具体回调函数使用参考我的博客。本人准备封装阻塞式socket通信类,目前客户端即将完成。

2、将阻塞式recv阻塞到一个循环里面,怎么退出?

答:recv阻塞后,循环并不会进行下去,看似是一个死循环,但是recv调用后循环会停下来,等到接收一个数据才往下执行,有人把recv放在线程循环接收,导致无法退出循环和线程,例如本人就是这样做的,这时候需要考虑怎么正常退出。

第一种方法采用setsockopt设置接收超时(也可以设置发送超时),这个本人不建议,因为有时候发送或者接收数据过大,这样可能会造成数据接收不完整,而且也不希望超时后循环继续下去。

第二种方法采用closesoket函数即可关闭,这个推荐,至于如何退出线程的话只要阻塞退出则可以想到常用的方法关闭线程,例如标志位,WaitForSingleObject等待

3、能够一个客户端对多个服务器,一个服务器对多个客户端吗

答:完全可以,一个服务器对多个客户端是很容易想到,不然网上一大堆聊天室怎么实现?客户端对多个服务器也是可以的,MFC中new几个客户端对象即可,注意创建客户端对象时候应该保持各个对象独立性,这个本人在封装类时候考虑过,尽量封装时候不要使用静态类属性或者方法,否则创建多个对象会有干扰。

猜你喜欢

转载自blog.csdn.net/FL1623863129/article/details/81210707
今日推荐