博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++基础--完善Socket C/S ,实现客户端,服务器端断开重连
阅读量:6157 次
发布时间:2019-06-21

本文共 5852 字,大约阅读时间需要 19 分钟。

1 // WindowsSocketServer.cpp : 定义控制台应用程序的入口点。  2 //  3   4 #include "stdafx.h"  5 #include 
6 #include
7 #include
8 #include
9 #include
10 #pragma comment(lib,"Ws2_32.lib") 11 12 using namespace std; 13 #define PORT 8080 14 #define IP_ADDRESS "172.16.20.181" 15 CRITICAL_SECTION cs; 16 //#define CLIENT_PORT 8081 17 ///#define CLIENT_IP_ADDRESS "172.16.20.181" 18 19 //接收每个客户端连接的处理函数 20 DWORD WINAPI ClientThread(LPVOID lpParameter); 21 22 //连接和服务器端有连接的客户端 23 DWORD WINAPI ConnectClientsThread(LPVOID lpParameter); 24 25 int main(int argc, char* argv[]) 26 { 27 //HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); 28 //SetConsoleTextAttribute(hConsole,FOREGROUND_GREEN); 29 InitializeCriticalSection(&cs); 30 //初始化事件和关键段,自动置位,初始无触发的匿名事件 31 //g_hThreadEvent = CreateEvent(NULL,FALSE,FALSE,NULL); 32 33 //system("ipconfig /all >log.txt"); 34 //WSADATA 结构体主要包含了系统所支持的Winsock版本信息 35 WSADATA Ws; 36 SOCKET ServerSocket, ClientSocket; 37 //TCP/IP 套接字指定套接字的地址 38 struct sockaddr_in LocalAddr, ClientAddr; 39 int Ret = 0; 40 int AddrLen = 0; 41 HANDLE hThread = NULL; 42 HANDLE hConnectThread = NULL; 43 //Init Windows Socket 44 //The WSAStartup function initiates use of WS2_32.DLL by a process. 45 //初始化Winsock2.2.使用WSAStartup函数 46 //第一个参数是所要用的Winsock版本号 47 //The MAKEWORD macro creates a WORD value by concatenating the specified values. 48 //第二个参数就是WSADATA 结构体的指针。如果初始化成功则返回0 49 //要注意任何WinsockAPI函数都必须在初始化后使用,包括错误检查函数 50 if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 ) 51 { 52 cout<<"初始化 Socket 失败:"<
<
=0 && line.length() > 0)184 {185 string clientIp = line.substr(0,index);186 string clientPort = line.substr(index+1);187 ClientAddr.sin_family = AF_INET;188 ClientAddr.sin_addr.s_addr = inet_addr(clientIp.c_str());189 ClientAddr.sin_port = htons((unsigned short)clientPort.c_str());190 191 //设置ServerAddr中前8个字符为0x00192 memset(ClientAddr.sin_zero, 0x00, 8);193 194 Ret = connect(ServerSocket,(struct sockaddr*)&ClientAddr, sizeof(ClientAddr));195 196 if( Ret == SOCKET_ERROR )197 {198 cout<<"服务端的方法 ConnectClients 在 建立与:"<
<<":"<
<<"连接过程发生错误:"<
<
logs.txt\""">"; 228 229 Ret = send(ClientSocket, SendBuffer, (int)strlen(SendBuffer), 0);230 if ( Ret == SOCKET_ERROR )231 {232 cout<<"发送消息失败:"<
<
1 // WindowsSocketClient.cpp : 定义控制台应用程序的入口点。  2 //  3   4 #include "stdafx.h"  5 #include 
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include "tinystr.h" 13 #include "tinyxml.h" 14 #pragma comment(lib,"Ws2_32.lib") 15 16 using namespace std; 17 18 #define PORT 8080 19 #define IP_ADDRESS "172.16.20.181" 20 21 #define LISTEN_PORT 8081 22 #define LISTEN_IP_ADDRESS "172.16.20.181" 23 //发送消息结构体 24 struct SendMsgStruct 25 { 26 SOCKET clientSocket; 27 string msg; 28 struct sockaddr_in ServerAddr; 29 }; 30 31 //接收消息结构体 32 struct RecvMsgStruct 33 { 34 SOCKET clientSocket; 35 struct sockaddr_in ServerAddr; 36 }; 37 38 //发送消息子线程 39 DWORD WINAPI SendThread(LPVOID lpParameter); 40 41 //接收消息子线程 42 DWORD WINAPI RecvThread(LPVOID lpParameter); 43 44 //去除字符串首尾空格 45 void trim(string &str); 46 47 //监听服务器的连接 48 DWORD WINAPI ListenServerThread(LPVOID lpParameter); 49 50 int _tmain(int argc, _TCHAR* argv[]) 51 { 52 //HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); 53 //SetConsoleTextAttribute(hConsole,FOREGROUND_GREEN); 54 55 WSADATA Ws; 56 SOCKET ClientSocket,ServerSocket; 57 struct sockaddr_in ServerAddr; 58 int Ret = 0; 59 int AddrLen = 0; 60 HANDLE hThread = NULL; 61 HANDLE hSendThread = NULL; 62 HANDLE hRevcThread = NULL; 63 HANDLE hListenThread = NULL; 64 //The WSAStartup function initiates use of WS2_32.DLL by a process. 65 //初始化 Windows Socket 66 if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 ) 67 { 68 cout<<"初始化 Socket 失败:"<
<
clientSocket = ClientSocket;109 msgSend->msg = "你好,Msg From Client";110 msgSend->ServerAddr = ServerAddr;111 //传递一个struct112 hSendThread = CreateThread(NULL, 0, SendThread, (LPVOID)msgSend, 0, NULL);113 WaitForSingleObject(hSendThread, INFINITE);114 115 if( hSendThread == NULL )116 {117 cout<<"创建发送消息子线程失败"<
clientSocket = ClientSocket;125 msgRecv->ServerAddr = ServerAddr;126 //传递一个struct指针参数127 hRevcThread = CreateThread(NULL,0,RecvThread,(LPVOID)msgRecv,0,NULL);128 WaitForSingleObject(hRevcThread, INFINITE);129 130 if( hRevcThread == NULL )131 {132 cout<<"创建接收消息子线程失败"<
log.txt");157 //WSADATA 结构体主要包含了系统所支持的Winsock版本信息158 WSADATA Ws;159 SOCKET ServerSocket, ClientSocket;160 //TCP/IP 套接字指定套接字的地址161 struct sockaddr_in LocalAddr, ServerAddr;162 int Ret = 0;163 int AddrLen = 0;164 HANDLE hThread = NULL;165 166 //初始化Winsock2.2.使用WSAStartup函数167 //第一个参数是所要用的Winsock版本号168 //The MAKEWORD macro creates a WORD value by concatenating the specified values. 169 //第二个参数就是WSADATA 结构体的指针。如果初始化成功则返回0170 //要注意任何WinsockAPI函数都必须在初始化后使用,包括错误检查函数171 if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )172 {173 cout<<"初始化 Socket 失败:"<
<
clientSocket;251 string SendMsg = myStruct->msg;252 struct sockaddr_in ServerAddr = myStruct->ServerAddr;253 254 while( true )255 { 256 int flag = 0;257 int bufSize = SendMsg.length();258 char * buf = const_cast
(SendMsg.c_str());259 flag = send(ClientSocket, buf, bufSize, 0);260 261 //判断当前时候存在可用连接,如果没有,再次连接262 while( flag == -1 || flag == 0)263 {264 cout<<"准备重连"<
clientSocket;311 struct sockaddr_in ServerAddr = recvStruct->ServerAddr;312 char recvBuf[500]={ "0"}; 313 int byteRecv = recv(clientSocket, recvBuf, 500, 0);314 int connectState;315 while( byteRecv == 0 )316 {317 //连接断开,重连318 cout<<"byteRecv == 0"<

转载于:https://www.cnblogs.com/kingdom_0/articles/2571727.html

你可能感兴趣的文章
分享一个HTML5画布实现的超酷文字弹跳球效果
查看>>
农民还乡
查看>>
asp.Net_图片上传的一个类库的源码
查看>>
Nagios+pnp4nagios+rrdtool 安装配置nagios(一)
查看>>
组合 z
查看>>
IOS研究之App转让流程须知具体介绍
查看>>
又一个触摸事件,哟
查看>>
一个非常巧妙的 hashcode 算法 return h & (length-1);
查看>>
还是找程序员做老公,最靠谱!
查看>>
覃超:从湘西到Facebook,硅谷只是技术人生的一小站
查看>>
世纪华通发布重组盛大游戏草案 承诺未来三年实现利润近76亿
查看>>
李彦宏妻子马东敏向中国科大捐赠1亿 成立蔷薇基金
查看>>
山西上党残疾男子“只”手脱贫 带领村民增收
查看>>
安检X光机下的春运归家图 宛如一幅幅水彩画
查看>>
春运首日武警广东总队护航
查看>>
美一8岁华裔男童体育课上头部重伤 家长吁调查
查看>>
香港一小巴侧翻致1死16伤 警方:未见机件故障
查看>>
不满俄欧“北溪-2”项目 美驻德大使威胁制裁德国企业
查看>>
“羊贵妃”没走“牛魔王”又来?牛肉价格屡创新高
查看>>
0基础如何入门Python编程
查看>>