基于 TCP 套接字通信课件.ppt

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于 TCP 套接字通信 基于 TCP 套接字通信 套接字存在于通信域中,通信域也叫地址簇,它是一个抽象的概念,主要用于将通过套接字通信的进程的共有特性,综合在一起,套接字通常只与同一区域的套接字交换数据,(也可能跨区通信,但这只是在执行某种转换进程后才能实现).Windows Sockets只支持一个通信域,网际域(AF_INET),这个域被使用网际协议簇通信进程使用 SOCK_STREAM    流式套接字,提供面向连接的数据传输服务,数据无差错,无重复的发送,并且按发送顺序接送,流式套接字实际上是基于TCP实现的 网络字节顺序(套接字与地址簇中使用) 由于不同的计算机存放数据字节的顺序不同,所以通信双方必须协商出统一的存放字节顺序,这样才能发送方的数据可以被接收方准确无误的读取,否则接收方读到的是一堆不知名的数据,所以通信前双方必须协商统一的用网络字节顺序,保证通信的正常进行 基于 TCP 套接字通信 在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model)。该模式的建立基于以下两点:1、非对等作用;2、通信完全是异步的。客户机/服务器模式在操作过程中采取的是主动请示方式: 首先服务器方要先启动,并根据请示提供相应服务:(过程如下) 1、打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收客户请求。 2、等待客户请求到达该端口。 3、接收到重复服务请求,处理该请求并发送应答信号。 4、返回第二步,等待另一客户请求 5、关闭服务器。 客户方: 1、打开一通信通道,并连接到服务器所在主机的特定端口。 2、向服务器发送服务请求报文,等待并接收应答;继续提出请求…… 3、请求结束后关闭通信通道并终止。 基于 TCP 套接字通信 流程图 基于 TCP 套接字通信 创建套接字 SOCKET socket (int af, int type, int protocol ); af: 指定地址簇,对于TCP/IP协议的套接字,它只能写成AF_INET(或PF_INET) type:指定套接字类型,它只支持两种套接字,SOCK_STREAM(流式套接字),SOCK_DGRAM(数据报式套接字) protocol:指定与特定地址家族相关的协议,如果指定为0,那么系统就会根据地址格式和套接字类别,自动选择一个合适的协议 SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0); 基于 TCP 套接字通信 SOCKADDR_IN addrSrv; //定义套接字地址结构 addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //设置本地计算机的IP地址,一般INADDR_ANY在程序运行时会自动计算成本地的IP地址的,表示服务器能接收来自任何计算机的请求 addrSrv.sin_family = AF_INET; //设置网络通信的网络协议族类型 addrSrv.sin_port = htons(4000); //设置本地(这里指服务端)计算机要打开的端口 addrSrv.sin_addr.S_un.S_addr=inet_addr(127.0.0.1); //设置远程计算机的IP地址 基于 TCP 套接字通信 将套接字绑定到端口上 bind(sockSrv,(SOCKADDR*)addrSrv,sizeof(SOCKADDR)); 将套接字设置为监听模式 listen(sockSrv,5); 5表示最大连接数量 } 建立套接字连接――connect()和accept() //等待客户请求来到,当请求来到时候,接受请求,接受连接请求,返回一个新的对应于此连接套接字 SOCKADDR_IN addrClient; int len = sizeof(SOCKADDR); SOCKET sClient=0; char sendText[256]; //开始监听 cout等待用户连接endl; while(sClient==0){ sClient= accept(sockSrv,(SOCKADDR*)addrClient,len);//sClient用于建立连接的套接字 cout用户连接到来endl; continue; } 数据传输――send()与recv() char buff[256]; char sendText[256]; send(sClient,sendText,strlen(sendText),0); int nRecv=recv(sC

文档评论(0)

风凰传奇 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档