客户端:
连接服务端
boolconnectServer(constchar*serverIP,unsignedshortport);
向服务端发送消息
voidsendMessage(char*data,255)">intcount);
接受服务端数据的回调函数
std::function<void(intcount)>onRecv;
断开连接的回调函数
void()>onDisconnect;
SocketClient.h
- #ifndef__SOCKET_CLIENT_H__
- #define__SOCKET_CLIENT_H__
- #include"SocketBase.h"
-
- classSocketClient:publicSocketBase
- {
- public:
- SocketClient(void);
- ~SocketClient(void);
- boolconnectServer(constchar*serverIP,unsignedshortport);
- voidsendMessage(char*data,intcount);
-
- std::function<void(intcount)>onRecv;
- std::function<void()>onDisconnect;
- private:
- boolinitClient();
- voidrecvMessage();
- HSocket_socketServer;
- HSocket_socektClient;
- };
- #endif
SocketClient.cpp
#include"SocketClient.h"
- SocketClient::SocketClient(void):
- onRecv(nullptr),
- _socektClient(0)
- {
- }
- SocketClient::~SocketClient(void)
- if(_socektClient!=0)
- _mutex.lock();
- this->closeConnect(_socektClient);
- _mutex.unlock();
- }
- boolSocketClient::initClient()
- _socektClient=socket(AF_INET,SOCK_STREAM,0);
- if(error(_socketServer))
- log("initclienterror!");
- _socektClient=0;
- returnfalse;
- true;
- boolSocketClient::connectServer(shortport)
- if(!this->initClient())
- structsockaddr_inserverAddr;
- memset(&serverAddr,sizeof(structsockaddr_in));
- serverAddr.sin_family=AF_INET;
- serverAddr.sin_port=htons(port);
- serverAddr.sin_addr.s_addr=inet_addr(serverIP);
- intret=0;
- ret=connect(_socektClient,(structsockaddr*)&serverAddr,structsockaddr));
- if(ret<0)
- this->closeConnect(_socektClient);
- std::threadrecvThread(&SocketClient::recvMessage,153); font-weight:bold; background-color:inherit">this);
- recvThread.detach();
- voidSocketClient::recvMessage()
- charrecvBuf[1024];
- intret=0;
- while(true)
- ret=recv(_socektClient,recvBuf,153); font-weight:bold; background-color:inherit">sizeof(recvBuf),0);
- if(ret<0)
- log("recverror");
- break;
- if(ret>0&&onRecv!=nullptr)
- onRecv(recvBuf,ret);
- _mutex.lock();
- if(onDisconnect!=nullptr)
- onDisconnect();
- voidSocketClient::sendMessage(intcount)
- if(_socektClient!=0)
- intret=send(_socektClient,data,count,0);
- log("senderror!");
- }
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|