网站大量收购独家精品文档,联系QQ:2885784924

5Socket编程基础教程.ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
四个收送函数的定义 int send(int s, const void *msg, size_t len, int flags); int sendto(int s, const void *msg, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); int recv(int s, void *buf, size_t len, int flags); int recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen); Udp客户端 方法一: socket-----sendto()或recvfrom() 方法二: socket-----connect()-----send()或recv() 收发函数的目标地址 从他们的定义可以看出: sendto和recvfrom在收发时指定地址 send和recv则没有 那么他们的地址是在那里指定的呢 答案就在于connect. int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen); 四个函数的选择 如果你只往一个地址发送,那么你可以使用send和recv,用connect指定目的地址 目的地址或端口有多个时,用sendto/recvfrom TCP连接和UDP连接 UDP中,connect作用,指定目的地址端口 TCP中,Connect建立连接,有三次握手信号 服务器端如何知道客户端地址? 1、客户端赋服务器端地址 2、客户端sendto 3、服务器端recvfrom,获得客户端地址 4、服务器端sendto 5、客户端recvfrom 什么时候用UDP 网络数据大多为短消息 拥有大量Client 对数据安全性无特殊要求 网络负担非常重,但对响应速度要求高 问题 如何确定数据接收完 什么时候关socket,关哪个? 如何处理收到的数据? 如何计算发送数据长度? 收发缓冲区 TCP 、UDP、Icmp包的最大长度? 最高MTU(最大传输单元)、MSS(最大分段) 以太网(Ethernet)协议:1500字节 PPPoE(ADSL)协议:1492字节 X.25协议(Dial Up/Modem):576字节 P2p:4470字节 UDP:65535-20 Icmp:MTU-28 TCP:MTU(1500)-20-20 socket编程基础 通讯流程 1、确定两端(客户端/服务端) 2、双方约定通讯规则(TCP/UDP协议) 3、各自赋予赋予地址(IP地址和端口) 4、建立连接(TCP需要) 5、发送和接收数据 6、处理数据 7、关闭连接 通讯流程 客户端 服务端 选择相同协议 设置服务端地址端口 设置监听端口 设置本地地址和端口 连接服务端 接受连接 发数据 收数据 发数据 收数据 客户端关闭连接 关闭连接 关闭连接 服务端关闭连接 socket通讯(TCP) 客户端 服务端 选择相同协议 Bind() Listen() Socket() Connect() Accept() Send() Rev() Send() Rev() CloseSocket() CloseSocket() CloseSocket() CloseSocket() Socket() Bind() 一个简单的程序 serverSock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//打开socket,确定协议 //填写地址端口 sockaddr_in saddr; saddr.sin_family=AF_INET; saddr.sin_port=htons(5678); saddr.sin_addr.s_addr=inet_addr(127.0.0.1); bind(serverSock, (struct sockaddr *)saddr, sizeof(struct sockaddr)); //开始监听 listen(serverSock,8); sockaddr_in caddr; int laddr; acceptSock=accept(serverSock,(struct sockaddr *)caddr,laddr);//接受连接 char buf[1024]; int recvSize; recvSize=recv(acceptSock,buf,sizeof(buf),

文档评论(0)

我是兰花草 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档