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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

Windows Socket 编程支持多线程TCP环境VS.docx

1、Windows Socket 编程 支持多线程TCP环境VSWindows Socket 编程 : 支持多线程(TCP)(环境:VS2010)几点说明:(1)发送的数据不能有空格;(2)这是控制台应用程序;1、UserMesInfo.h 公共文件,客户端和服务器端公用;1 #ifndef User_Mes_Sock 2 #define User_Mes_Sock 3 #include 4 #endif 5 6 const short MesLogin = 1001; 7 const short MesError = 1002; 8 const short MesNormal = 1003; 9

2、 const short LoginSuc = 1004;10 const short MesToAll = 1005;11 const short OnLineUser = 1010;12 13 14 /User Struct15 struct UserInfo16 17 short userId;18 char userName32;19 SOCKET userSock;20 LONG userAddr;21 UserInfo *pNext;22 ;23 24 /Message Struct25 struct MesInfo26 27 short MesType;28 char fromU

3、serName32;29 char toUserName32;30 char MesContent1024;31 ; 2、TCP:客户端程序 1 #include 2 #include 3 #include 4 5 #include UserMesInfo.h 6 7 #pragma comment(lib,ws2_32.lib) 8 9 using namespace std; 10 11 BOOL isLogin = false; 12 13 14 string charToString(char temp) 15 16 string tempStr = ; 17 for(int i =

4、0; i tempWho; 34 35 if( isLogin & tempWho = 1) 36 37 /To One 38 printf(Please input NAME you want to CHAT : ); 39 char toName32 = 0; 40 scanf(%s, toName); 41 memcpy(sendBuff, &MesNormal, 2); 42 memcpy(sendBuff+2, toName, 32); 43 printf(Please input what do you want to say : ); 44 char Message1000 =

5、0; 45 scanf(%s, Message); 46 memcpy(sendBuff+34, Message, strlen(Message); 47 send(servSock, sendBuff, sizeof(sendBuff)+1, 0); 48 else if(isLogin & tempWho = 2) 49 /To ALL 50 printf(Please input DATA : ); 51 char Message1000 = 0; 52 scanf(%s, Message); 53 54 memcpy(sendBuff, &MesToAll, 2); 55 memcpy

6、(sendBuff+2, Message, strlen(Message); 56 send(servSock, sendBuff, sizeof(sendBuff)+1, 0); 57 58 else if(isLogin & tempWho = 3) 59 char getOnLineUsers4; 60 memcpy(getOnLineUsers, &OnLineUser, 2); 61 send(servSock, getOnLineUsers, sizeof(getOnLineUsers), 0); 62 else if(isLogin & tempWho = 4) 63 break

7、; 64 else if(isLogin) 65 printf(You input Error! Please Again !); 66 67 68 69 return TRUE; 70 71 72 73 DWORD WINAPI ProcThread(LPVOID lpParameter) 74 75 SOCKET cliSocket = *(SOCKET*)lpParameter; 76 77 /SOCKADDR_IN sockFrom ; 78 /int length = sizeof(SOCKADDR); 79 80 char recvBuf1024 = 0; 81 82 while(

8、true) 83 84 memset(recvBuf, 0x00, 1024); 85 int recvLen = recv(cliSocket, recvBuf, 1024, 0); 86 if(recvLen 0) 87 88 short megId = *(short*)recvBuf; 89 switch(megId) 90 91 case LoginSuc: 92 93 /char userName32 = 0; 94 /memcpy(userName, recvBuf+2, 4); 95 printf(Login Success !n); 96 isLogin = true; 97

9、 98 break; 99 case MesNormal:100 101 char Mess1000;102 memcpy(Mess, recvBuf+2, sizeof(recvBuf)-2);103 printf( = Me :%sn, Mess);104 105 106 break;107 case MesToAll:108 109 char Mess1000;110 memcpy(Mess, recvBuf+2, sizeof(recvBuf)-2);111 printf( = All :%sn, Mess);112 113 break;114 case OnLineUser:115

10、116 char onLineUser100 = 0;117 118 memcpy(onLineUser, recvBuf+2, sizeof(recvBuf)-2);119 120 /string userStr = charToString(onLineUser);121 122 for(int i =0; i sizeof(onLineUser); i+)123 coutonLineUseri;124 125 /printf(%sn, userStr);126 coutendlonLineUserendl;127 printf(n);128 129 130 break;131 defau

11、lt :132 break;133 134 /end if135 / end while136 137 return 0;138 139 140 int main()141 142 WORD wVersionRequested;143 WSADATA wsaData;144 int err;145 146 wVersionRequested = MAKEWORD(2, 2);147 148 err = WSAStartup(wVersionRequested, &wsaData);149 if (err != 0) 150 printf(WSAStartup failed with error

12、: %dn, err);151 return 1;152 153 154 if (LOBYTE(wsaData.wVersion) != 2 | HIBYTE(wsaData.wVersion) != 2) 155 /* Tell the user that we could not find a usable */156 /* WinSock DLL. */157 printf(Could not find a usable version of Winsock.dlln);158 WSACleanup();159 return 1;160 161 else162 printf(The Wi

13、nsock 2.2 dll was found okayn);163 164 165 SOCKET clientSock = socket(AF_INET, SOCK_STREAM, 0);166 167 if(clientSock = -1)168 169 perror(socket创建出错!); 170 exit(1);171 172 173 SOCKADDR_IN addrClient;174 addrClient.sin_addr.S_un.S_addr = inet_addr(127.0.0.1);175 addrClient.sin_family = AF_INET;176 add

14、rClient.sin_port = htons(6000);177 178 179 int ret = connect(clientSock, (sockaddr*)&addrClient, sizeof(SOCKADDR);180 if (ret)181 182 printf(连接失败n);183 return -1;184 185 186 HANDLE thHandle = CreateThread(NULL, 0, ProcThread, &clientSock, 0, NULL);187 188 if(NULL = thHandle)189 190 coutCreate Thread

15、 failed !userSock = clientSock;201 strcpy_s(user-userName, userName);202 user-userAddr = addrClient.sin_addr.S_un.S_addr;203 */204 205 char loginInfo64 = 0;206 memcpy(loginInfo, &MesLogin, 2);207 memcpy(loginInfo+2, userName, strlen(userName);208 209 210 /int a = send(clientSock, loginInfo, strlen(l

16、oginInfo), 0);211 int a = send(clientSock, loginInfo, strlen(loginInfo), 0);212 213 SendMes(clientSock);214 215 /Sleep(20000);216 /closesocket(clientSock);217 CloseHandle(thHandle);218 WSACleanup();219 220 221 system(PAUSE);222 return 0;223 3、TCP:服务器端程序 1 #include 2 #include 3 #include 4 #include 5

17、#include 6 #include UserMesInfo.h 7 8 #pragma comment(lib,ws2_32.lib) 9 10 using namespace std; 11 12 UserInfo *gUserInfo ; 13 14 string charToString(char temp) 15 16 string tempStr = ; 17 for(int i = 0; i userSock; 26 /SOCKADDR_IN sockFrom ; 27 28 char recvBuf1024; 29 /int length = sizeof(SOCKADDR)

18、; 30 31 while(true) 32 33 memset(recvBuf, 0x00, 1024); 34 recv(cliSocket, recvBuf, 1024, 0); 35 36 short MesType = *(short*)recvBuf; 37 38 switch(MesType) 39 40 case MesLogin: 41 42 static short USERID = 1001; 43 UserInfo* userInfo = new UserInfo; 44 char* userName = (char*)(recvBuf + 2); 45 strcpy_

19、s(userInfo-userName, userName); 46 userInfo-userId = USERID+; 47 userInfo-userSock = cliSocket; 48 userInfo-userAddr = (UserInfo*)lpParameter)-userAddr; 49 userInfo-pNext = NULL; 50 51 if(!gUserInfo) 52 53 gUserInfo = userInfo; 54 else 55 56 userInfo-pNext = gUserInfo; 57 gUserInfo = userInfo; 58 59

20、 printf(Login : %s = %d !n, userInfo-userName, userInfo-userId); 60 61 char loginInfo4 = 0; 62 memcpy(loginInfo, &LoginSuc, 2); 63 64 int i = send(cliSocket, loginInfo, strlen(loginInfo), 0); 65 66 67 break; 68 case MesNormal: 69 70 /printf(The Normal Message !); 71 char toName32 = 0; 72 memcpy(toNa

21、me, recvBuf+2, 32); 73 couttoNameuserName, strlen(toName) 89 90 SOCKET toSock = tempUser-userSock; 91 send(toSock, sendMes, strlen(sendMes)+1, 0); 92 sendFlag = true; 93 94 tempUser = tempUser-pNext; 95 96 if(!sendFlag) 97 98 printf(Send Failed !n); 99 100 101 102 break;103 case MesToAll:104 105 cha

22、r Message1000 = 0;106 memcpy(Message, recvBuf+2, sizeof(recvBuf)-2);107 UserInfo* tempUser = gUserInfo;108 char sendMes1002;109 memcpy(sendMes, &MesToAll, 2);110 memcpy(sendMes+2, Message, sizeof(Message);111 while(tempUser)112 113 SOCKET toSock = tempUser-userSock;114 int i = send(toSock, sendMes,

23、strlen(sendMes)+1, 0);115 if(i 0)116 117 printf(Send To %s Success !n, tempUser-userName);118 119 tempUser = tempUser-pNext;120 121 122 break;123 case MesError:124 /printf(The Error Message !);125 break; 126 case OnLineUser:127 128 129 char onLineUserBuff1000 = 0;130 UserInfo* tempUser = gUserInfo;1

24、31 132 memcpy(onLineUserBuff, &OnLineUser, 2);133 134 int i = 0;135 string userStr = ;136 while(tempUser)137 138 userStr += charToString(tempUser-userName);139 /处理方式有问题140 /memcpy(onLineUserBuff+2, tempUser-userName, 32);141 /send(cliSocket, onLineUserBuff, sizeof(onLineUserBuff), 0);142 tempUser = tempUser-pNext;143 144 memcpy(onLineUserBuff+2, userStr.c_str(), userStr.length();145 send(cliSocket, onLineUserBuff, sizeof(onLineUserBuff), 0);146 147 148 break;149 default:150 /printf(The Default Process !);151 break;152 153 154 155 156 157 return 0;158 159 160 int main()161 162 WORD wV

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

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