用socket实现服务器的编程总结.docx

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用socket实现服务器的编程总结   Socket编程总结   听会、看会、甚至把代码引用过来,不一定是真正的会了,这点我真是深有体会。前几天去一家公司面试,有上机操作的题目,要求是这样的:开两个线程,一个是服务器线程一个是客户端线程,要求客户端给服务器发送一个“你好,服务器!”,服务器收到后给客户端回复“你好,客户端!”,然后客户端和服务器同时关闭。   由于最近一直在做一个屏幕监控的软件,socket很常用,但是大部分socket通信代码都是直接“引用过来的”,直接配置一下IP和端口,甚至,后来还把IP和端口放到了.ini文件中。所以自己写出来的socket代码千疮百孔,惨不忍睹。。。回来后痛定思痛,认真的总结了以下socket通信的步骤:   TCP的步骤很规范:服务器端:   客户端:   一、初始化工作   MSDN中原话如下:   TheWSAStartupfunctioninitiatesuseofWs2_byaprocess。   意思就是你如果想用socket那套函数,得先做一些初始化:   1引入头文件:#include   2在工程中加入socket的动态库文件:在Project->Settings->Link在【Object/librarymodules:】一项中加入Ws2_(至于动态库为什么是.lib结尾的,这里不做赘述,可以看看动态库那部分知识),然后点击OK。   3WSAStartup代码参考MSDN中WSAStartup下面的实例代码,直接粘过来就OK。   二、服务器端编程   做完了初始化,现在到服务器端的编写了   此处注意:   a)这里用SOCKADDR_IN   代表SOCKADDR是因为SOCKADDR是为所有的地址家族准备的,这个结构可能随着所使用的网络协议不同而不同。在TCP/IP协议中,用SOCKADDR_IN结构来替换sockaddr,以方便填写地址信息。   b)INADDR_ANY允许套接字向任何分配给本地机器的IP地址发送或者接收数据。例如多个网卡的机器,每个网卡都有自己的IP   ,用INADDR_ANY允许一个独立应用接收发自多个接口的回应   c)htonl是把一个unsignedlong的数转换为一个网络字节序   三、客户端编程   客户端代码跟服务器代码很类似   首先初始化资源。。。   其次是socket编程:   四、UDP   代码略。。。源码发信li@   五、总结   1一定按照指定网络字节序初始化IP和PORT   几个有用的函数(详细介绍见MSDN)   inet_addr-把点分十进制的IP地址转化为in_addr结构体的地址;   inet_ntoa-把in_addr格式的IP地址转换成一个点分十进制IP地址;   htons-把一个u_short类型的主机序列数转化成一个网络字节序的u_short;htonl-把一个u_long类型的主机序列数转换成一个网络字节序的u_long   2注意服务器端,不要用绑定的socket收发数据,而是用建立连接的socket收发数据3UDP连接方式中,sendto的第五个参数conststructsockaddr*,一定搞清楚地址。   socket编程看似简单,主要思想也就那么几步,但是很容易出问题。我面试时候的问题在于:没有按照指定的网络字节序初始化IP和PORT,多么痛的领悟!   在计算机通信领域,socket被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过socket这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。   socket的典型应用就是Web服务器和浏览器:浏览器获取用户输入的URL,向服务器发起请求,服务器分析接收到的URL,将对应的网页内容返回给浏览器,浏览器再经过解析和渲染,就将文字、图片、视频等元素呈现给用户。   学习socket,也就是学习计算机之间如何通信,并编写出实用的程序。   IP地址   计算机分布在世界各地,要想和它们通信,必须要知道确切的位置。确定计算机位置的方式有多种,IP地址是最常用的,例如,是国内第一个、全球第三个开放的DNS服务地址,是本机地址。   其实,我们的计算机并不知道IP地址对应的地理位置,当要通信时,只是将IP地址封装到要发送的数据包中,交给路由器去处理。路由器有非常智能和高效的算法,很快就会找到目标计算机,并将数据包传递给它,完成一次单向通信。   目前大部分软件使用IPv4地址,但IPv6也正在被人们接受,尤其是在教育网中,已经大量使用。   端口有了IP地址,虽然可以找到目标计算机,但仍然不能进行通信。一台计算机可以同时提供多种网络服务,例如Web服务、FTP服务、SMTP服

文档评论(0)

mmrs369 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档