c高级服务器怎么中断客户端,C++ Socket C/S ,实现客户端,服务器端断开重连

#include #include "tinystr.h"

#include "tinyxml.h"

#pragma comment(lib,"Ws2_32.lib")

using namespace std;

#define PORT 8080

#define IP_ADDRESS "172.16.20.181"

#define LISTEN_PORT 8081

#define LISTEN_IP_ADDRESS "172.16.20.181"

//发送消息结构体

struct SendMsgStruct

{

SOCKET clientSocket;

string msg;

struct sockaddr_in ServerAddr;

};

//接收消息结构体

struct RecvMsgStruct

{

SOCKET clientSocket;

struct sockaddr_in ServerAddr;

};

//发送消息子线程

DWORD WINAPI SendThread(LPVOID lpParameter);

//接收消息子线程

DWORD WINAPI RecvThread(LPVOID lpParameter);

//去除字符串首尾空格

void trim(string &str);

//监听服务器的连接

DWORD WINAPI ListenServerThread(LPVOID lpParameter);

int _tmain(int argc, _TCHAR* argv[])

{

//HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

//SetConsoleTextAttribute(hConsole,FOREGROUND_GREEN);

WSADATA Ws;

SOCKET ClientSocket,ServerSocket;

struct sockaddr_in ServerAddr;

int Ret = 0;

int AddrLen = 0;

HANDLE hThread = NULL;

HANDLE hSendThread = NULL;

HANDLE hRevcThread = NULL;

HANDLE hListenThread = NULL;

//The WSAStartup function initiates use of WS2_32.DLL by a process.

//初始化 Windows Socket

if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )

{

cout

msgSend->msg = "你好,Msg From Client";

msgSend->ServerAddr = ServerAddr;

//传递一个struct

hSendThread = CreateThread(NULL, 0, SendThread, (LPVOID)msgSend, 0, NULL);

WaitForSingleObject(hSendThread, INFINITE);

if( hSendThread == NULL )

{

cout

msgRecv->ServerAddr = ServerAddr;

//传递一个struct指针参数

hRevcThread = CreateThread(NULL,0,RecvThread,(LPVOID)msgRecv,0,NULL);

WaitForSingleObject(hRevcThread, INFINITE);

if( hRevcThread == NULL )

{

cout

//WSADATA 结构体主要包含了系统所支持的Winsock版本信息

WSADATA Ws;

SOCKET ServerSocket, ClientSocket;

//TCP/IP 套接字指定套接字的地址

struct sockaddr_in LocalAddr, ServerAddr;

int Ret = 0;

int AddrLen = 0;

HANDLE hThread = NULL;

//初始化Winsock2.2.使用WSAStartup函数

//第一个参数是所要用的Winsock版本号

//The MAKEWORD macro creates a WORD value by concatenating the specified values.

//第二个参数就是WSADATA 结构体的指针。如果初始化成功则返回0

//要注意任何WinsockAPI函数都必须在初始化后使用,包括错误检查函数

if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )

{

cout

string SendMsg = myStruct->msg;

struct sockaddr_in ServerAddr = myStruct->ServerAddr;

while( true )

{

int flag = 0;

int bufSize = SendMsg.length();

char * buf = const_cast(SendMsg.c_str());

flag = send(ClientSocket, buf, bufSize, 0);

//判断当前时候存在可用连接,如果没有,再次连接

while( flag == -1 || flag == 0)

{

cout

struct sockaddr_in ServerAddr = recvStruct->ServerAddr;

char recvBuf[500]={"0"};

int byteRecv = recv(clientSocket, recvBuf, 500, 0);

int connectState;

while( byteRecv == 0 )

{

//连接断开,重连

cout<

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值