基本信息
源码名称:windows网络编程_文件传输
源码大小:0.23M
文件格式:.zip
开发语言:C/C++
更新时间:2020-12-29
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 3 元 
   源码介绍

  简单的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;
}