网络编程_第二课_Socket编程基础_第1页
网络编程_第二课_Socket编程基础_第2页
网络编程_第二课_Socket编程基础_第3页
网络编程_第二课_Socket编程基础_第4页
网络编程_第二课_Socket编程基础_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2 Socket编程基础 1 Lecturer 张靖宇四川大学计算机学院Email jingyuz 网络编程 Part2 Socket编程基础 2 Socket编程基础 2 Systemcallsrelevanttonetworking socketconnectbindlistenacceptsendrecvclose closesocketshutdownselectfcntlgetsocknamegetpeernamegetsockopt 2 Socket编程基础 3 socketSystemCall 网络应用进程调用的第一个函数 用于创建套接口intsocket intfamily inttype intprotocol 返回 非负描述字成功 1失败典型用例intsockfd socket AF INET SOCK STREAM IPPROTO TCP 2 Socket编程基础 4 bindSystemCall bind为套接口分配一个本地协议地址intbind intsockfd conststructsockaddr myaddr intaddrlen 几乎所有server进程在三路握手前 都需要绑定到一个well known地址 client通常不必调用bind Why 2 Socket编程基础 5 bindSystemCall 示例 intsockfd Createasocketsockfd socket AF INET SOCK STREAM PPROTO TCP Setupthesockaddrstructurestructsockaddr insaServer saServer sin family AF INET saServer sin addr s addr inet addr 10 0 0 1 saServer sin port htons 7000 Bindthelisteningsocketusingthe informationinthesockaddrstructurebind sockfd structsockaddr 2 Socket编程基础 6 bindSystemCall 参数解释 structsockaddr insaServer bind sockfd structsockaddr 注意两个表示地址的结构体的区别 2 Socket编程基础 7 套接口地址strcut structsockaddr u shortsa family charsa data 14 structsockaddr in u shortsin family u shortsin port structin addrsin addr charsin zero 8 structin addr u longs addr structsockaddr in6 u shortsin6 family u shortsin6 port u longsin6 flowinfo structin6 addrsin6 addr u longsin6 scope id 2 Socket编程基础 8 byteorder 不同类型CPU的电脑中 内存存储multi bytes整数序列有两种方法 小端序 little endian 低序字节存储在低地址大端序 big endian 高序字节存储在低地址网络中传输的数据必须按网络字节序 即大端序IntelCPU采用小端序做主机序所以在大部分PC机上 当应用进程将整数送入socket前 需要转化成网络序 当应用进程从socket取出整数后 要转化成主机序 2 Socket编程基础 9 listenSystemCall listen通知内核 进程已准备好在这个socket上acceptincomingconnectionslisten将套接口类型从主动 active 套接口转换成被动 passive 套接口 将套接口状态从CLOSED转换到LISTEN函数第二个参数指定在此套接口排队的最大connections数量intlisten intsockfd intbacklog 典型用例listen sockfd 5 队列满了 socket如何响应新的syn 2 Socket编程基础 10 acceptSystemCall 在server进程调用listen之后 server进程接着调用accept等待client的连接请求 intaccept intsockfd structsockaddr clientaddr int addrlen 返回 非负描述字成功 1失败典型用例intconnfd accept sockfd NULL NULL 2 Socket编程基础 11 TCPServerProcess启动流程总结 启动 socket bind listen accept 开始send recv数据 2 Socket编程基础 12 connectSystemCall client端进程调用connect函数与tcpserver建立连接intconnect intsockfd structsockaddr servaddr intaddrlen 典型用例connect sockfd structsockaddr connect失败的情况ETIMEDOUTECONNREFUSED RSTEHOSTUNREACH 2 Socket编程基础 13 Socket通信流程总结 启动 socket bind listen accept 开始send recv数据 启动 socket connect 开始send recv数据 Server启动流程 Client启动流程 2 Socket编程基础 14 sendSystemCall send系统调用在一个已连接套接口上发送数据intsend intsockfd constchar buf intlen intflags 典型用例send connectSocketfd sendbuf strlen sendbuf 0 如果socketoutputbuffer已经没有剩余空间 send调用将会一直阻塞 block 或者说调用send的进程会一直sleep 直到buffer腾出空间 2 Socket编程基础 15 recvSystemCall recv系统调用在一个已连接套接口上接收数据intrecv intsockfd char buf intlen intflags 典型用例recv connectSocketfd recvbuf recvbuflen 0 如果socketinputbufffer没有数据 recv调用将在数据到来前一直block 即进程一直sleeprecv调用中虽然指定了期待接收的字节数len 但recv方法可能在未读取到len个字节的信息就返回 TCP是字节流协议的特征 2 Socket编程基础 16 close closesocket close系统调用 Linux适用 和closesocket windows适用 关闭一个套接口intclose intsockefd intclosesocket intsockefd 典型用例close connectSocketfd close关闭socket后 socket不能再进行读或写 接着TCP自动触发连接终止序列 2 Socket编程基础 17 Quiz 考虑在TCP IP网络中如何处理以下两个场景的需求场景一 主机A连续发送三个字符串给主机B1 Hello2 Mailreceived3 Thanks场景二 主机A连续发送三个二进制文件给主机B1 book doc文件大小 2 100K2 flower jpg文件大小 30K3 cup xsl文件大小 800K 2 Socket编程基础 18 练习 编写Client Server程序 三路握手成功后 client端发送字符串 c net test 请求server端程序将server端主机上C盘根目录下net te

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论