基本信息
源码名称:windows网络编程_文件传输
源码大小:0.23M
文件格式:.zip
开发语言:C/C++
更新时间:2020-12-29
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 3 元×
微信扫码支付:3 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
简单的tcp/ip协议服务端和客户端连接,文件传输
int gConnectSocket_TCP(SOCKET &_socket, char *_ipAddr, int _port, int _bufsize/*=100*1024*/, int timeout/* = 5000*/)
{
int err;
//创建Socket句柄
_socket = socket(AF_INET, SOCK_STREAM, 0);
if (INVALID_SOCKET == _socket)
{
//printf("socket failed with error: %ld\n", WSAGetLastError());
WSACleanup();
return 1;
}
//设置服务器IP地址
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = inet_addr(_ipAddr);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(_port);
//resize recv buffer
if (::setsockopt(_socket, SOL_SOCKET, SO_RCVBUF, (char*)&_bufsize, sizeof(_bufsize)))
{
goto error;
}
int StreamTimeOut = timeout;
// set receive timeout
if (::setsockopt(_socket, SOL_SOCKET, SO_RCVTIMEO, (char *)&StreamTimeOut, sizeof(StreamTimeOut)) == SOCKET_ERROR)
{
goto error;
}
//set non-blocking mode
unsigned long ul = 1;
err = ioctlsocket(_socket, FIONBIO, (unsigned long*)&ul);
if (err == SOCKET_ERROR)
{
goto error;
}
//connect to camera
int ret = connect(_socket, (const struct sockaddr *)&addrSrv, sizeof(addrSrv));
//TRACE(L"videoSocket connect returnVal=%d",ret);
//use select poll connection status
struct timeval ConnectTimeOut;
fd_set w;
FD_ZERO(&w);
FD_SET(_socket, &w);
ConnectTimeOut.tv_sec = timeout / 1000;
ConnectTimeOut.tv_usec = 0;
err = select(0, 0, &w, 0, &ConnectTimeOut);
if (err <= 0)
{
goto error;
}
//resume blocking mode
unsigned long mode = 0;
err = ioctlsocket(_socket, FIONBIO, (unsigned long*)&mode);
if (err == SOCKET_ERROR)
{
goto error;
}
return 0;
error:
return -2;
}