MFC 网络编程小结

最近对MFC的网络编程方面研究了一下。。现在想对学习过程中的问题和一些想法做下总结。

1.现说下socket(套接字)吧,初学者刚看到这个东西的时候一定觉得很神秘,我也一样,现在也只是有一点皮毛的理解

 socket与MFC网络编程是息息相关的,基本上所有的在网络上传输数据的功能都离不开它。 打个比方,如果把电脑比成手机,那么它就相当于你的手机卡。

 现在我就来把MFC的socket的工作过程形象化在大家面前。也就是把对socket的操作与手机打电话的每个步骤联系起来

1.当你把手机卡插上的时候,就相当于创建了一个套接字(或者看成创建了一个SOCKET对象),

2.此时并把它绑定在你的手机上,也就是bind操作(插在你的手机之后,使用权就落在你的手机上面了)。

3.然后你把手机开机,这样你的手机就能接受到外来的信号了,也就相当于listen操作(因为这个时候你就能接收到外部的信号了)。

4.这个时候突然有人来电话了,当然别人拨打的的只是一个号码,刚好就是你的手机卡号(注意你的手机卡就是你的socket)。这就好比客户机的connect操作。

5.这时你的手机响了,现在你有两种选择:接或者挂。这里我们先假设你接了吧!这不就相当于是accept操作了吗!~

6.电话通了,下一步是干什么呢??这很显然是双方要开始沟通了嘛..沟通这个过程就是一个不断recv和send的过程。

7.最后电话打完了,现在就要结束通话,挂机了。这也就是closesocket了,勉强一点还能算上关手机(WSACleanup)这个过程。

这样基本上就把基本的网络编程函数的逻辑关系给弄清楚了。。。

希望这样形象的理解能帮助初学者更快得理解程序的工作原理。。  上面主要说的是服务器端的过程,以及是基于TCP协议的前提。

另外我想简单得说下基于UDP方法,方法其实大体上和TCP差不多,但在数据传输的时候有点差别,一是函数名了UDP是recvfrom和sendto,而TCP是send和recv。

二就是服务端不用listen和accept功能了(用上面的话说,也就是说不管你listen不listen,客户端都能发数据,你接受不接受又是一回事了)。

另外贴一下可能用到的关于字节序的常用函数:

网络通信中用到的是网络字节序,intel的机器本机字节序和网络字节序的存放格式是不一样的,所以要用想用的函数进行转化。

inet_addr()将点分十进制的IP地址转化为u_long型

inet_ntoa()将in_addr结构类型的参数转化为点分十进制的IP地址

htonl()将u_long型的IP地址从主机字节序转换为网络字节序

htons()将u_short型的IP地址从主机字节序转换为网络字节序

posted @ 2012-08-10 22:06  Amazing_Y  阅读(1726)  评论(0编辑  收藏  举报