stdafx.cpp
来自「A test program ok? Very good for many be」· C++ 代码 · 共 112 行
CPP
112 行
// stdafx.cpp : source file that includes just the standard includes
// Tst080110.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
int CltConnect(string strSvrAddr, unsigned short nPort)
{
struct sockaddr_in stSvrAddr;
int iSockClt = socket(AF_INET, SOCK_STREAM, 0);
//struct timeval stTimeval;
int iRet = 0;
if (-1 == iSockClt)
{
//cerr << "socekt fail, error=[" << errno << ", " << strerror(errno)
// << "], ln=" << __LINE__ << endl;
//TRACE("errno=%d, \"%s\"", errno, strerror(errno));
TRACE("errno=%d\n", WSAGetLastError());
return -1;
}
/*//set timed out
memset(&stTimeval, 0, sizeof(struct timeval));
stTimeval.tv_sec = 2; stTimeval.tv_usec = 0;
SetNonBlock(iSock);
*/
memset(&stSvrAddr, 0, sizeof(struct sockaddr_in));
stSvrAddr.sin_family = AF_INET;
stSvrAddr.sin_port = htons(nPort);
stSvrAddr.sin_addr.s_addr = inet_addr(strSvrAddr.c_str());
iRet = connect(iSockClt, (struct sockaddr*)&stSvrAddr, sizeof(struct sockaddr_in));
if (0 != iRet)
{
cerr << "connect fail, error=[" << errno << ", " << strerror(errno)
<< "], ln=" << __LINE__ << endl;
closesocket(iSockClt);
return -1;
}
return iSockClt;
}
//持续读入, 直到读到指定字节数为止, 或中途出错返回
//参数: pszBuf-缓冲区首地址, uLen-一次性读入多少字节内容, iRead-实际读入的字节数
//返回值: -1-出错, 0-成功
int RecvOnEnd(int iSock, char *pszBuf, size_t uLen, size_t& uRead)
{
ssize_t iRet = 0;
size_t uOffset = 0;
if (NULL == pszBuf)
{
return -1;
}
while (uOffset < uLen)
{
iRet = recv(iSock, pszBuf+uOffset, uLen-uOffset, 0);
if (0 > iRet)
{
cerr << "recv error=" << errno << ", " << strerror(errno) << ", " << "ln=" << __LINE__ << endl;
if (EINTR == errno)
{
continue;
}
return -1;
}
if (0 == iRet)
{
cerr << "Peer closed connection, ln=" << __LINE__ << endl;
//closesocket(iSock);
return -1;
}
uOffset += iRet;
}
uRead = uOffset ;
return 0;
}
//持续发送, 直到发送到指定字节数为止, 或中途出错返回
//参数: pszBuf-缓冲区首地址, uLen-一次性发送多少字节内容, uSend-实际发送的字节数
//返回值: -1-出错, 0-成功
int SendOnEnd(int iSock, const char* pszBuf, size_t uLen, size_t& uSend)
{
ssize_t iRet = 0;
size_t uOffset = 0;
if (NULL == pszBuf)
{
return -1;
}
while (uOffset < uLen)
{
iRet = send(iSock, pszBuf+uOffset, uLen-uOffset, 0);
if (0 >= iRet)
{
cerr << "send fail, error=[" << errno << ", " << strerror(errno) << "], ln=" << __LINE__ << endl;
return -1;
}
uOffset += iRet;
}
uSend = uOffset;
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?