代码
bool AsioAsyncTcpClient::SendDataTcp(string msg)
{
bool re = false;
int sendcnt = 5;
int nNetTimeout=500;//ms
uint8_t readbuf[1024];
SOCKADDR_IN addrSrv;
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(port);
addrSrv.sin_addr.S_un.S_addr = inet_addr(ip.c_str());
do
{
//创建套接字
SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);
if (SOCKET_ERROR == sockClient){
//printf("Socket() error:%d", WSAGetLastError());
re = false;
}
int nZero = 0;
setsockopt(sockClient, SOL_SOCKET, SO_RCVTIMEO, (char *)&nNetTimeout, sizeof(int));
if (!re&&connect(sockClient, (struct sockaddr*)&addrSrv, sizeof(addrSrv)) == INVALID_SOCKET){
//printf("Connect failed:%d", WSAGetLastError());
re = false;
}
if (!re && msg.size() == send(sockClient, msg.c_str(), msg.size(), 0))
{
memset(readbuf, 0, 1024);
int relen = recv(sockClient, (char*)readbuf, 1024, 0);
if (relen == 27 && readbuf[0] == 0xaa && readbuf[1] == 0xaa && readbuf[25] == 0xee && readbuf[26] == 0xee)
{
//aaaa460000001101aae40701040c250300000b00000c0dc2aaeeee
re = true;
}
else
{
WriteDataLog::TransferLog(string((char*)readbuf,relen), 1);
}
}
closesocket(sockClient);
} while (!re && --sendcnt>0);
if (!re)
{
WriteDataLog::TransferLog("send fail ");
WriteDataLog::TransferLog(msg,1);
}
return re;
}