- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
课堂作业
1、基于TCP 的C/S程序,服务器和客户端程序的基
本流程是怎样的?使用API 函数给出框架代码。
2、请解释int listen(SOCKET sockfd,int backlog)中
backlog的具体含义。
3、调用connect ()时触发什么过程?
4 、UDP编程时可否使用connect (),为什么?
5、recvfrom()填入的地址的作用是什么?
6、调用recvfrom ()之前是否必须绑定?为什么?
1、编写基于TCP 的C/S程序,服务器和客户端程序
的基本流程是怎样的?使用API 函数给出框架代码。
• // 初始化WS2_32.dll TCPServer
• WSADATA wsaData;
• WSAStartup(MAKEWORD(2, 2), wsaData);
• // 创建监听套接字
• SOCKET sListen = socket(AF_INET, SOCK_STREAM,
IPPROTO_TCP);
• // 填充sockaddr_in结构
• sockaddr_in sin;
• sin.sin_family = AF_INET;
• sin.sin_port = htons(4567);
• sin.sin_addr.S_un.S_addr = INADDR_ANY;
• // 绑定监听套接字到一个本地地址
• if(bind(sListen, (LPSOCKADDR)sin, sizeof(sin)) ==
SOCKET_ERROR)
• return 0;
• // 进入监听模式
• if(listen(sListen, 2) == SOCKET_ERROR)return 0;
• // 循环接受客户的连接请求
• char buffer[128]= “1234567”
• sockaddr_in remoteAddr;
• int nAddrLen = sizeof(remoteAddr);
• SOCKET sClient;
• while(TRUE)
• {// 接受一个新连接
• sClient = accept(sListen,
(SOCKADDR*)remoteAddr, nAddrLen);
• if(sClient == INVALID_SOCKET)continue;
• // 向客户端发送数据
• send(sClient, buffer, strlen(buffer), 0);
• // 关闭同客户端的连接
• closesocket(sClient);
• }
• // 关闭监听套接字
• closesocket(sListen);
• return 0;
• }
TCPClient
• // 初始化WS2_32.dll
• WSADATA wsaData;
• WSAStartup(MAKEWORD(2, 2), wsaData);
• // 创建套接字
• SOCKET s = socket(AF_INET, SOCK_STREAM,
IPPROTO_TCP);
• if(s == INVALID_SOCKET)return 0;
• // 填写远程地址信息
• sockaddr_in servAddr;
• servAddr.sin_family = AF_INET;
• servAddr.sin_port = htons(***);
• servAddr.sin_addr.S_un.S_addr =inet_addr(*.*.*.*);
•
•
• //连接服务器
• if(connect(s, (sockaddr*)servAddr,
sizeof(servAddr)) == -1)return 0;
• // 发送数据
• send(s,hello,strlen(hello),0);
• // 接收数据
• char buff[256];
• int nRecv = recv(s, buff, 256, 0);
• if(nRecv 0)HandleData(buff);//HandleData()
文档评论(0)