ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:25.85KB ,
资源ID:15369600      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/15369600.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(网络编程Word文档下载推荐.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

网络编程Word文档下载推荐.docx

1、 ;void usage(_TCHAR *name) /程序出现一部分错误时调用此函数,并返回 fprintf(stderr, usage: %s portn, name);int _tmain(int argc, _TCHAR* argv) SOCKET servsock, clisock; /定义服务器和客户端的套接字 struct sockaddr_in sa; /定义服务器的IP地址信息的结构体变量 struct sockaddr_in cliaddr; /定义客户端的Ip地址信息的结构体变量 /结构体的定义如下: /struct sockaddr_in / / short sin_f

2、amily; /指一套地址族 / unsigned short sin_port; /指端口号 / struct in_addr sin_addr; /指IP地址 / char sin_zero8; /主要是使该结构的大小和SOCKADDR结构大小相同, / /这样做的目的是使地址操作更方mm,便 int len; /长度 int err; /错误代号 int servport = 5555; /服务器端口 char buff256; /缓冲区 SYSTEMTIME st; /定义系统时间变量 WSADATA wsd; printf(*n);* time server sample *n ma

3、p scores; /定义一个名为scores的map对象,由const char* 类型的键索引,关联的值则为int类型 /给map添加元素/ 使用数组索引的形式插入数据 scoresTom = 80;Mary = 90;Peter = 87;Rose = 85; if(argc 2) usage(argv0); return -1; if(argc = 2) servport = _wtoi(argv1); if(servport 65535 | servport 1) usage(argv0); return -2; if(WSAStartup(MAKEWORD(2,2), &wsd)

4、!= 0) printf(WSAStartup() failed!n return -3;/初始化WinSock2.2 WSAStartup函数的调用是为了加载WS2_32.lib库文件,/只有当这个库被加载之后才能够使用一些通信的API函数。 /对windows socket API进行初始化,只有在成功地完成调用之后才能使用socket。 /WSAStartup(MAKEWORD(2,2), &wsd): /第一个参数:WORD类型,表示欲使用的windows socket API版本, /高位字节定义的是次版本号,低位字节定义的是主版本号 /第二个参数:指向WSADATA资料的指针 /返

5、回值:成功返回Creating socket .n servsock = socket(AF_INET, SOCK_STREAM, 0); /函数原型:SOCKET socket(int af, int type, int proctocol) /af指address family(地址族)一般都填写AF_INET,表示是在Internet上的Socket; /type是socket的类型,当采用流连接的方式时用SOCK_STREAM,用数据报文方式时用SOCK_DGRAM。 /proctocol一般都为,表示用对两种类型的socket分别采用缺省的TCP和UCP传输协议 /函数的返回值是由W

6、insock定义的一种数据类型SOCKET, /它实际就是个整形数据在Socket创建成功时,代表Winsock分配给程序的Socket编号, /后面调用传输函数时,就可以把它像文件指针一样引用。如果创建失败,返回值是INVALID_SOCKET if (servsock = INVALID_SOCKET) fprintf(stderr, socket() failed: %dn, WSAGetLastError() ); return -4;0Kn memset(&sa, 0, sizeof(sa) ); sa.sin_family = AF_INET; / 填写服务器地址信息 sa.sin

7、_port = htons(servport); /servport为你需要绑定的端口,端口为5555 sa.sin_addr.S_un.S_addr = htonl(INADDR_ANY); /将sockaddr_in结构中的sin_addr赋值为一个IP地址 /本句中指定通信对象为INADDR_ANY / IP地址为INADDR_ANY(本机所有的IP地址,多IP的时候有区分) /htonl()返回一个网络字节顺序的值。 /注意使用htonl()将一个位数从主机字节顺序转换成网络字节顺序。/ htons()将一个位数从主机字节顺序转换成网络字节顺序/htons()返回一个网络字节顺序的值。

8、Bind .n err = bind(servsock, (const sockaddr *)&sa, sizeof(sa); /服务器端口绑定(这样客户端才知道待会要连接哪个地址的哪一个端口) /第一个参数为上面创建好的套接字 /第二个参数指向描述通信对象地址信息的结构体的指针(结构体指struct sockaddr_in) /第三个参数是该结构体的长度 if(err!=0)bind() failed: return -5;OKnlisten .n err = listen(servsock, 5); /进入监听状态int listen(SOCKET s, int backlog); /第二

9、个参数指等待连接的队列长度,可取-5 if(err !listen() failed: return -6;0kn /进入循环,等待客户连接请求/ 进入While循环来等待要求通信的客户端的请求了,这就要用到accept函数,/一旦accept函数检测到有连接请求,就要进行处理。 while(1) wait request .n len = sizeof(cliaddr); clisock = accept(servsock, (struct sockaddr *) &cliaddr, &len); /定义客户端套接字的对象,地址以及长度 /SOCKET accept(SOCKET s, st

10、ruct sockaddr_in *addr, int* addrlen); /接受连接请求 /当没有连接请求时,对于阻塞方式,就进入等待状态,直至有一个请求到达为止。 /在接收到请求之后,会为这个连接建立一个新的Socket来与对方通信,并把它作为返回值。 /新建的Socket与原来的Socket有相同的特性,包括端口号。 /原来的Socket被释放,用于继续等待其他的连接请求。 /而新生成的Socket才是与客户端进行通信的实际Socket。 /参数中的指针addr和addrlen用来返回客户机的sockaddr_in结构体, /通过addr可得到客户机的IP地址和连接端口。 if(cli

11、sock = INVALID_SOCKET) fprintf(stderr, accept() failed:, WSAGetLastError(); closesocket(servsock); return -7;accept client: %s:%dn, inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port) );/打印客户端的地址,端口号。注意的是:函数inet_ntoa() 的参数是struct in_addr,而不是long。/同时要注意的是他返回的是一个指向字符的指针。/ntohs()将一个位数由网络字节顺序转换为主机字节顺序。/ntohs()返回一个以主机字节顺序表达的数。/ntohl()将一个位数由网络字节顺序转换为主机字节顺序。/ ntohl()返回一个以主机字节顺序表达的数。 GetLocalTime(&st); /获取系统时间recv data .n memset(buff, 0, sizeof(buff); /用清空缓冲区,相当于缓冲区的初始化 if(recv(clisock, buff, sizeof(buff), 0) = SOCKET_ERROR) /接收套接字,并判定是否成功接收 recv error !

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1