版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上并发套接字编程课程设计报告 姓名:王延兴 班级:9班 学号: 并发套接字编程课程设计报告班级:11级9班学号: 姓名:王延兴一、 设计任务分析(一)实验环境操作系统:Windows或Linux编程工具及集成开发环境:VC+(二)实验目的和要求实验目的:掌握Linux或Windows平台上多线程、多进程或异步I/O的套接字编程。实验要求:(1)在Windows上,编写、编译1个客户机端程序和1个服务器端程序。要求客户机端程序能发送请求给服务器端程序,服务器端程序收到后能发送本机时间给客户机端程序。(2)在相同或不同机子上,先运行服务器端程序可执行文件,后运行客户机端程序
2、可执行文件。可选内容:(1)编写Linux或Windows平台上采取各并发方式的1种程序。(2)测试多线程、多进程或异步I/O的性能。2、 设计方案本实验采用的多线程的编程方式实现了并发u 各个函数功能: DWORD WINAPI ClientThread(LPVOID lpParameter) 接收每个客户端连接的处理函数hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)CientSocket, 0, NULL);创建进程send(CientSocket, tmp, (int)strlen(tmp), 0);发送数据recv(Cien
3、tSocket, RecvBuffer, MAX_PATH, 0);接收数据WSAStartup(MAKEWORD(2,2), &Ws) 初始化套接字类库socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 创建套接字bind(ServerSocket, (struct sockaddr*)&LocalAddr, sizeof(LocalAddr);绑定套接字 listen(ServerSocket, 10);侦听,队列大小为10u 设计思想: 创建TCP并发服务器 3、 详细设计服务器:详细代码:/ multhreadServer.cpp :
4、Defines the entry point for the console application./#include "stdafx.h"#include <iostream>#include <Windows.h>#pragma comment(lib,"ws2_32.lib") using namespace std;#include <winsock2.h>#include <time.h>#define PORT 4000#define IP_ADDRESS "127.0.0.1&q
5、uot;DWORD WINAPI ClientThread(LPVOID lpParameter) /接收每个客户端连接的处理函数SOCKET CientSocket = (SOCKET)lpParameter;int Ret = 0;char RecvBufferMAX_PATH; /在VC+6.0中, MAX_PATH的值为260。time_t t = time( 0 ); char tmp64; strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) );Ret=send(Cie
6、ntSocket, tmp, (int)strlen(tmp), 0);if ( Ret = SOCKET_ERROR )cout<<"Send Info Error"<<endl;while ( true )memset(RecvBuffer, 0x00, sizeof(RecvBuffer); /为新申请的内存做初始化工作, 其返回值为指向RecvBuffer的指针。Ret = recv(CientSocket, RecvBuffer, MAX_PATH, 0);if ( Ret = 0 | Ret = SOCKET_ERROR ) cout&l
7、t;<"客户端退出!"<<endl;closesocket(CientSocket);/关闭客户端套接字 break;cout<<"接收到客户信息为:"<<RecvBuffer<<endl;return 0;int main(int argc, char* argv)WSADATA Ws;SOCKET ServerSocket, CientSocket;struct sockaddr_in LocalAddr, ClientAddr;int Ret = 0;int AddrLen = 0;HANDLE
8、 hThread = NULL;/Init Windows Socketif ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )cout<<"Init Windows Socket Failed:"<<GetLastError()<<endl;return -1;/Create SocketServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if ( ServerSocket = INVALID_SOCKET )cout<<&qu
9、ot;Create Socket Failed:"<<GetLastError()<<endl;return -1;LocalAddr.sin_family = AF_INET;LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);LocalAddr.sin_port = htons(PORT);memset(LocalAddr.sin_zero, 0x00, 8);/Bind SocketRet = bind(ServerSocket, (struct sockaddr*)&LocalAddr, size
10、of(LocalAddr);if ( Ret != 0 )cout<<"Bind Socket Failed:"<<GetLastError()<<endl;return -1;Ret = listen(ServerSocket, 10);if ( Ret != 0 )cout<<"listen Socket Failed:"<<GetLastError()<<endl;return -1;cout<<"服务端已经启动"<<endl;whi
11、le ( true )AddrLen = sizeof(ClientAddr);CientSocket = accept(ServerSocket, (struct sockaddr*)&ClientAddr, &AddrLen);if ( CientSocket = INVALID_SOCKET )cout<<"Accept Failed:"<<GetLastError()<<endl;break;cout<<"客户端连接:"<<inet_ntoa(ClientAddr.sin
12、_addr)<<":"<<ClientAddr.sin_port<<endl;hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)CientSocket, 0, NULL);/*lpsa:线程句柄的安全属性,比如子进程是否可以继承这个线程句柄,一般情况设置为NULLcbStack:线程栈大小,一般取0表示默认大小lpStartAddr:线程入口函数 lpvThreadParam:就是线程入口函数的参数,就是ThreadProc( void* lpParamete) 的参数fdwCre
13、ate:控制线程创建的标志一般为0,表示线程立即启动。如果你想创建之后把线程挂起来可以传入CREATE_SUSPENDED ,传入这个参数你需要再适当的地方调用ResumeThread 启动线程lpIDThread:是线程ID返回值,这个用来接收线程返回的ID*/if ( hThread = NULL )cout<<"Create Thread Failed!"<<endl;break;CloseHandle(hThread);closesocket(ServerSocket);closesocket(CientSocket);WSACleanup(
14、);return 0;客户端: 详细代码:/ multhreadClient.cpp : Defines the entry point for the console application./#include "stdafx.h"#pragma comment(lib,"ws2_32.lib")#include <iostream>#include <Windows.h>#include <winsock2.h>using namespace std;#define PORT 4000#define IP_ADDR
15、ESS "127.0.0.1"int main(int argc, char* argv)WSADATA Ws; /存储被WSAStartup函数调用后返回值SOCKET CientSocket;struct sockaddr_in ServerAddr;int Ret = 0;int AddrLen = 0;HANDLE hThread = NULL;char SendBufferMAX_PATH;/Init Windows Socketif ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 ) cout<<"Ini
16、t Windows Socket Failed:"<<GetLastError()<<endl;return -1;/Create SocketCientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if ( CientSocket = INVALID_SOCKET )cout<<"Create Socket Failed:"<<GetLastError()<<endl;return -1;ServerAddr.sin_family = AF_INE
17、T;ServerAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);ServerAddr.sin_port = htons(PORT);memset(ServerAddr.sin_zero, 0x00, 8);Ret = connect(CientSocket,(struct sockaddr*)&ServerAddr, sizeof(ServerAddr);if ( Ret = SOCKET_ERROR )cout<<"Connect Error:"<<GetLastError()<<end
18、l;return -1;elsecout<<"连接成功!"<<endl;char recvbuf100;memset(recvbuf, 0x00, sizeof(recvbuf); Ret = recv(CientSocket, recvbuf, 100, 0); if ( Ret = 0 | Ret = SOCKET_ERROR ) cout<<"接受失败!"<<endl; cout<<" 接收到的服务器端时间: "<<recvbuf<<endl;while ( true )cin.getline(SendBuffer, sizeof(SendBuffer); /接受一个字符串,可以接收空格并输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年荆州市沙市区事业编单位人员招聘笔试备考题库及答案详解
- 2026年山西省吕梁市中小学编制教师招聘笔试参考试题及答案详解
- 2026年承德市双滦区中小学编制教师招聘笔试备考试题及答案详解
- 2026年乌鲁木齐市新市区中小学编制教师招聘笔试备考试题及答案详解
- 2026年南宁市兴宁区中小学编制教师招聘考试模拟试题及答案详解
- 2026年北京市西城区中小学编制教师招聘笔试备考题库及答案详解
- 2026年北京市海淀区事业编单位人员招聘笔试备考试题及答案详解
- 2026年阜阳市颍东区中小学编制教师招聘考试备考试题及答案详解
- 2026年兰州市安宁区中小学编制教师招聘笔试备考试题及答案详解
- 2026年北海市银海区中小学编制教师招聘考试参考试题及答案详解
- 汇文中学分班试题及答案
- 广州市荔湾区白鹤洞街道公开招考1名合同制工作人员管理单位遴选500模拟题附带答案详解
- 先天性胆道闭锁(共29张课件)
- 人教版(2024新版)八年级上册物理《开启科学探索之旅》教学设计
- GB/T 44373-2024智能网联汽车术语和定义
- 人教版三年级《语文下册》期末试卷(下载)
- 马工程《公共财政概论》课后习题库(含)参考答案(可做期末复习和试卷)
- 2023-2024学年湖南省衡阳市小学语文五年级期末自我评估考试题附参考答案和详细解析
- GB/T 27648-2011重要湿地监测指标体系
- 戏剧影视文学课程《影视文学欣赏》课程教学大纲
- 《会计基础与实务》教案(第5版)
评论
0/150
提交评论