




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第14章 网络编程本章主要内容:计算机网络的基本知识、大量的与Socket编程相关的函数、学习TCP网络编程、UDP网络编程。14.1 计算机网络基本知识。14.2 Windows Sockets的实现在UNIX上推出了Socket,程序员可以非常方便地进行TCP/IP编程,目前已知的所有的操作系统都有Socket,而且这些Socket是统一的。通信区域,也叫做地址族。对于WinSock来说,只支持一个地址族:AF_INET。网络字节顺序:假如有一个整数:12 34X,占据连续的两个字节,不管在哪个系统中,都可能调用Socket里面的一个函数进行转换。14.2.1 套接字的类型目前有三种类型:流式套接字,SOCK_STREAM:实际上就是TCP编程,面向连接的,可靠的数据传输服务。相当于打电话。数据报式套接字,SOCK_DGRAM:实际上就相当于写信,发信方将数据打包(信封,数据报),写好收信人的地址(IP),寄出去,至于数据报能否到达,没有办法控制的,也根本就不知道信是否已经收到。实际上是基于UDP协议实现的。原始套接字,SOCK_RAW。14.2.2 基于TCP的socket编程其流程(略)。所有的网络编程,一定是有两端:服务器端、客户端。14.2.3 基于UDP的socket编程流程(略)14.3 相当函数14.3.1 WSAStartup加载Socket库。int WSAStartup( WORD wVersionRequested,/指定准备加载的WinSock库的版本 LPWSADATA lpWSAData/指向WSADATA结构体的指针);typedef struct WSAData WORD wVersion; WORD wHighVersion; char szDescriptionWSADESCRIPTION_LEN+1; char szSystemStatusWSASYS_STATUS_LEN+1; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR* lpVendorInfo; WSADATA, *LPWSADATA;14.3.2 socket函数用来创建一个母Socket。SOCKET socket( int af,/地址家庭Address Family,对于WinSock来说,只支持AF_INET(也可以写成PF_INET) int type,/指定套接字的类型,是SOCK_STREAM还是SOCK_DGRAM int protocol/指定与特定的地址家庭相关的协议,一般取为0);函数如果成功,就返回一个SOCKET类型的套接字,我们后面可以使用这个母套接字了。如果失败,返回一个INVALID_SOCKET值。编程时,必须要检查这个母套接字是否创建成功。14.3.3 bind函数将该母套接字绑定到本地的某个地址和某个端口上。int bind( SOCKET s,/要绑定的母套接字 const struct sockaddr* name,/指定要绑定的本地地址信息 int namelen);其中的struct socketaddr结构体:struct sockaddr_in short sin_family;/地址家庭,AF_INET u_short sin_port;/端口 struct in_addr sin_addr;/地址,如:192.168.0.123 char sin_zero8;/没用;struct sockaddr_in6 short sin6_family; u_short sin6_port; u_long sin6_flowinfo; struct in6_addr sin6_addr; u_long sin6_scope_id;struct sockaddr_in6_old short sin6_family; u_short sin6_port; u_long sin6_flowinfo; struct in6_addr sin6_addr; ;其中的in_addr结构体,用来表示一个IPv4版本的地址,如下:typedef struct in_addr union struct u_char s_b1,s_b2,s_b3,s_b4; S_un_b; struct u_short s_w1,s_w2; S_un_w; u_long S_addr; S_un; in_addr;如sin_addr.S_un.S_un_b.s_b1=192;sin_addr.S_un.S_un_b.s_b2=168;如果用一个字符串来表达IP地址,可以使用:unsigned long inet_addr( const char* cp/cp就是用字符串表达的IP地址,如192.168.0.123);char* FAR inet_ntoa( struct in_addr in/IP地址);14.3.5 listen函数int listen( SOCKET s,/要进行监听的母套接字 int backlog/等待连接队列的最大长度,一般可以设置为SOMAXCONN);将该母套按字设置为监听状态,可以准备迎接客户的连接了。14.3.6 accept函数SOCKET accept( SOCKET s,/母套接字 struct sockaddr* addr,/客户端的IP地址等信息,这个参数我们不用设置,系统会自动设置好 int* addrlen/就是第二个参数的长度,也不用设置);如果成功,返回一个新的小的套接字,之后与这个客户的联系都只使用这个小的套接字进行。直到双方停止连接。如果失败,返回INVALID_SOCKET。14.3.7 recv函数从一个已连接的套接字接收数据。int recv( SOCKET s,/上面用建立的新的小的套接字 char* buf,/接收的数据放的缓冲区,通常是一个char型的数组 int len,/上面buf缓冲区的长度 int flags/);14.3.8 send函数向一个已经创建好的套接字处发送数据int send( SOCKET s, const char* buf, int len, int flags);14.3.9 connect函数int connect( SOCKET s, const struct sockaddr* name,/服务器的IP地址等信息 int namelen);客户端就通过connect与服务器进行了连接。如果成功,返回0,如果返回SOCKET_ERROR,则说明发生了错误。14.3.10 recvfrom函数是UDP方式来接收数据的。int recvfrom( SOCKET s, char* buf, int len, int flags, struct sockaddr* from,/发送数据方的地址信息 int* fromlen);14.3.11 sendto函数是UDP方式来向指定的IP地址处发送数据int sendto( SOCKET s, const char* buf, int len, int flags, const struct sockaddr* to,/准备发送的目标地址信息 int tolen);14.3.12 htons和htonl函数htons函数把一个u_short类型的值从主机字节(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 金融行业员工岗位调整及劳动合同完善协议
- 环保项目环评咨询与实施合同
- 离婚协议书贷款还款及财产分割执行细则合同
- 企业环境管理体系建设与节能减排方案
- 碳捕集利用与储存一体化解决方案
- 混凝土搅拌站管理与维护方案
- 地标建筑幕墙清洗方案设计
- 足浴专业考试题目及答案
- 带中括号的三步混合运算(教学设计)-2024-2025学年数学五年级上册冀教版
- 宠物专业的面试题及答案
- 采暖补贴审计方案(3篇)
- 一例前置胎盘的个案护理讲课件
- 锂电池公司管理制度
- GB/T 17948.7-2025旋转电机绝缘结构功能性评定总则
- 农光互补光伏发电项目发展趋势与前景分析
- 2025年中小学生科普知识竞赛题库及答案
- 新疆交投面试题目及答案
- 卫生院卒中哨点建设汇报
- 工会换届面试题目及答案
- 低压电工安全培训
- 数字信号处理理论与应用练习题集
评论
0/150
提交评论