Socket通信教案.pptx

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Socket通信;Socket通信;(一)Socket相关理论;(一)Socket相关理论;(一)Socket相关理论;(一)Socket相关理论;(一)Socket相关理论—类型; Socket 的 位置;(一)Socket相关理论;(一)Socket相关理论; TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口,就像操作系统会提供标准的编程接口。 TCP/IP引入了新型的“I/O”操作---Socket编程接口 socket的出现只是可以更方便的使用TCP/IP协议栈而已,其对TCP/IP进行了抽象,形成了几个最基本的函数接口。比如create,listen,accept,connect,read和write等等。 ; 如果一个程序创建了一个socket,并让其监听80端口,其实是向TCP/IP协议栈声明了其对80端口的占有。以后,所有目标是80端口的TCP数据包都会转发给该程序(这里的程序,因为使用的是Socket编程接口,所以首先由Socket层来处理)。accept函数返回的新socket其实指代的是本次创建的连接,而一个连接是包括两部分信息的,一个是源IP和源端口,另一个是宿IP和宿端口。 (所谓accept函数,其实抽象的是TCP的连接建立过程。)) ; 所以,accept可以产生多个不同的socket,而这些socket里包含的宿IP和宿端口是不变的,变化的只是源IP和源端口。这样的话,这些socket宿端口就可以都是80,而Socket层还是能根据源/宿对来准确地分辨出IP包和socket的归属关系,从而完成对TCP/IP协议的操作封装!而同时,放火墙的对IP包的处理规则也是清晰明了,不存在前面设想的种种复杂的情形。 ;(二)TCP的工作流程 ;(二)TCP的工作流程 ;2.3 服务器与客户端五元组的建立 ;2.4 TCP的程序工作流程图 ;客户端的建立; 这时候,我们可以为主对话框添加一个按钮,caption设为“连接”,用于连接。双击这个按钮,开始函数定义,在函数体中我们加入以下代码: m_mySocket.Connect(_T(127.0.0.1),8888); 第一个参数表示想要连接的服务器的IP,第二个参数表示端口。 现在,客户端与服务器的连接工作已经做好了,我们需要再在客户端的主对话框中添加一个按钮,caption设为“发送”,用于发送信息,在改按钮的函数中,我们添加以下代码: m_mySocket.Send(客户端发来了信息,100);//参数分别表示要发送的字符串和字符串的最大长度. ;服务端的建立:;在OnAccept函数中,我们添加以下代码: Socket SocketRev= new Socket (); Accept(SocketRev); ? 这段代码的作用是在当服务器监听到客户端的连接请求时,新建一个CRecv的成员,并用它来接受客户端的连接请求,也就是用它与客户端绑定。 ? ; 这段代码用于接收客户端发送过来的字符串,然后以MessageBox的形式显示出来。 最后,在主对话框的头文件中添加#include Listen.h ,并且声明一个CListen变量 m_listen 。然后,在主对话框的OnInitDialog函数中,添加如下代码: m_listen.Create(8888);??//8888表示的是我们要监听的端口 ? m_listen.Listen(); ;(三)Socket相关代码;af参数:说明套接字接口要使用的协议地址族,地址族与协议族含义相同。如果想建立一个TCP或UDP,只能用常量。AF_INET参数表示使用互联网协议(IP)地址。Winsock还支持其他协议,但一般很少使用。 type参数:描述套接口的类型,af是AF_INET的时候只能为SOCK_STREAM、SOCK_DGRAM或SOCK_RAW Protocol参数:说明该套接口使用的特定协议,当协议地址族af和协议类型type确定后,协议字段可以使用的值是限定的 ;3.1.2 将创建的套接口与服务器地址绑定-bind() ;S参数:标识一个未绑定的套接口描述字,它是socket()函数调用成功时返回的值 name参数:是一个与指定协议有关的地址结构指针,存储了套接口的地址信息,Winsock中使用sockaddr_in结构指定IP地址和端口信息 struct sockaddr_in{ short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8];

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档