- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
- PAGE 1 -
- PAGE 8 -
实 验 报 告
实验名称
多客户端socket-programming
课程名称
计算机网络
实验目的
掌握网络应用程序的开发方法;
掌握client/server 结构软件的设计与开发方法
掌握socket机制的工作原理
要求完成:
一个server和多个client之间的通信
实验环境
Windows操作系统,vc6开发环境。
实验内容与结果
1)程序整体功能;
1.支持server和多个client的双向通信
2)程序组成及各模块/函数功能;
1.服务器
bind函数连接
listen函数监听收到请求后
accept函数同意接收
recv函数接收客户发来的消息
send函数发送给客户消息应答
CreateThread函数创建多线程并行
select函数监视我们需要监视的文件描述符的变化情况
2.客户端
Socket函数创建套接字
Connect函数连接电脑
Send函数像客户端发送消息
Recv函数接收来自于客户端的应答
Closesocket函数关闭连接
3、服务器的几个主要动作如下:
?1).创建监听套接字,绑定,监听;? 2).创建工作者线程;? 3).创建一个套接字数组,用来存放当前所有活动的客户端套接字,每accept一个连接就更新一次数组;
3)重要的数据结构,模块/函数算法;
struct fd_set:可以理解为一个集合,这个集合中存放的是文件描述符(file descriptor),即文件句柄,这可以是我们所说的普通意义的文件我们是要监视这些文件描述符的读变化的,即我们关心是否可以从这些文件中读取数据了,如果这个集合中有一个文件可读,select就会返回一个大于0的值,表示有文件可读,如果没有可读的文件,则根据timeout参数再判断是否超时,若超出timeout的时间,select返回0,若发生错误返回负值。可以传入NULL值,表示不关心任何文件的读变化。
4)程序清单
Client.cpp
Server.cpp
5)程序的运行和测试结果(测试时采用一个server和两个client通信)
///server///
C:\Users\WangJialinF:\Learning\计算机网络\lab1\多路复用\server\Debug\server.exe
Accepted client:127.0.0.1:2504
Accepted client:127.0.0.1:2505
client 1:hello
server for 1 cilent:hello ,this is server
client 0:hi
server for 0 cilent:this is server
client 0:i am client 0
server for 0 cilent: i know
client 1:i am client 1
server for 1 cilent:right
///client 0///
C:\Users\WangJialinF:\Learning\计算机网络\lab1\多路复用\Debug\多路复用.exe
Send:hi
server :this is server
Send:i am client 0
server : i know
Send:
///client 1///
C:\Users\WangJialinF:\Learning\计算机网络\lab1\多路复用\Debug\多路复用.exe
Send:hello
server :hello ,this is server
Send:i am client 1
server :right
Send:
实验中的问题
刚开始时不知道如何运用select函数,不知道怎么和多clien结合,最后是采用了多线程解决的。采用一个主线程,负责监听客户端的连接请求,当接收到某个客户端的连接请求后,创建一个专门用于和该客户端通信的套接字和一个辅助线程。最后达到了目的,并且可移植性较好。
附件:
server.cpp
#include winsock.h
#include stdio.h
#define PORT 5150
#define MSGSIZE 1024
#pragma comment(lib, ws2_32.lib)
int g_iTotalConn = 0;
SOCKET g_CliSocketArr[FD_SETSIZE];
DWORD WINAPI WorkerThread(LPVOID lpParameter);
int main()
{
WSADATA wsaData;
SOCKET s
文档评论(0)