亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? transferfile.c

?? 剛學VC時寫的文件傳輸程序,全部用SocketAPI編寫
?? C
字號:
#ifndef	__TRANSFER_FILE_C__
#define	__TRANSFER_FILE_C__

#include <WinSock.h>
#include "TransferFile.h"
#include "net_list.h"

//#pragma comment(lib,"ws2_32.lib")


LPWSADATA					inet_WsaData;
PTRAN_LIST					inet_TransList = NULL;
SOCKET						inet_Listen_Socket = INVALID_SOCKET;
PCHAR						inet_Local_Dir = NULL;


void net_InsertItemIntoList(PTRAN_THREAD item)
{
	PTRAN_LIST p = inet_TransList, pt = NULL;
	while (p)
	{
		pt = p;
		p = p->next;
	}
	p = malloc(sizeof(TRAN_LIST));
	p->context = item;
	p->next = NULL;
	if (!pt)
	{
		inet_TransList = p;
	}
	else
	{
		pt->next = p;
	}
}

PTRAN_LIST net_SearchItemFromListByItem(PTRAN_THREAD item)
{
	PTRAN_LIST p = inet_TransList;
	while (p)
	{
		if (p->context == item)
		{
			break;
		}
		p = p->next;
	}
	return p;
}


PTRAN_LIST net_SearchItemFromListBySocket(SOCKET sock)
{
	PTRAN_LIST p = inet_TransList;
	while (p)
	{
		if (p->context->sock == sock)
		{
			break;
		}
		p = p->next;
	}
	return p;
}


void net_DisposeListItemByItem(PTRAN_THREAD item)
{
	DWORD dwExitCode;
	PTRAN_LIST p = inet_TransList, pt = NULL;
	while (p)
	{
		if (p->context == item)
		{
			if (!pt)	//delete the header
			{
				inet_TransList = p->next;
			}
			else
			if (!p->next)	//delete the tail
			{
				if (pt)
				{
					pt->next = NULL;
				}
			}
			else
			{
				pt->next = p->next;
			}
			if (p->context)
			{
				if (p->context->ctrl)
				{
					free(p->context->ctrl);
				}
				if (p->context->hfile != INVALID_HANDLE_VALUE)
				{
					CloseHandle(p->context->hfile);
					p->context->hfile = INVALID_HANDLE_VALUE;
				}
				if (p->context->sock != INVALID_SOCKET)
				{
					closesocket(p->context->sock);
					p->context->sock = INVALID_SOCKET;
				}
				if (p->context->thread != INVALID_HANDLE_VALUE)
				{
					if (GetExitCodeThread(p->context->thread, &dwExitCode))
					{
						TerminateThread(p->context->thread, dwExitCode);
					}
					p->context->thread = INVALID_HANDLE_VALUE;
				}
				free(p->context);
			}
			free(p);
			break;
		}
		pt = p;
		p = p->next;
	}
}

void net_RemoveItemFromListBySocket(SOCKET item)
{
	PTRAN_LIST p = inet_TransList, pt = NULL;
	while (p)
	{
		if (p->context->sock == item)
		{
			net_DisposeListItemByItem(p->context);
			break;
		}
		pt = p;
		p = p->next;
	}
}

void net_RemoveList()
{
	PTRAN_LIST p = inet_TransList;
	while (p)
	{
		net_DisposeListItemByItem(p->context);
		p = inet_TransList;
	}
}


DWORD inet_Accept_Connect(SOCKET sock)
{
	PTRAN_THREAD p = malloc(sizeof(TRAN_THREAD));
	int len;
	len = sizeof(SOCKADDR_IN);
	p->ctrl = NULL;
	p->hfile = INVALID_HANDLE_VALUE;
	p->thread = INVALID_HANDLE_VALUE;
	p->sock = accept(sock, (struct sockaddr *)&p->addr, &len);
	net_InsertItemIntoList(p);
	return RET_SUCCESS;
}


WORD inet_Extract_FileName_From_Buffer(PBYTE buf, WORD len, char * fname, PWORD fnlen, PDWORD fsize)			//get file name & length
{
	WORD i = 0;
	if (len < 5)
	{
		return RET_FAILURE;
	}
	//get file size from buffer
	*fsize = (DWORD)(*(buf + 0));
	*fsize += (DWORD)(*(buf + 1)) * 256;
	*fsize += (DWORD)(*(buf + 2)) * 256 * 256;
	*fsize += (DWORD)(*(buf + 3)) * 256 * 256 * 256;
	//get filename from buffer
	memcpy(fname, buf + 4, len - 4);
	*fnlen = strlen(fname);
	return RET_SUCCESS;
}


BYTE inet_Calc_BCC(PBYTE buf, WORD len)
{
	BYTE ret = 0;
	while (len > 0)
	{
		ret ^= *buf++;
		len --;
	}
	return ret;
}

void inet_Reply_Remote(SOCKET s, PTF_COMMAND pcmd)
{
	WORD len = COMMAND_HEADER_LENGTH + pcmd->low + (WORD)pcmd->high * 256;
	PBYTE buf = malloc(len);
	memcpy(buf, pcmd, COMMAND_HEADER_LENGTH - 1);
	if ((pcmd->low + (WORD)pcmd->high * 256 > 0) && (pcmd->data))
	{
		memcpy(buf + COMMAND_HEADER_LENGTH - 1, pcmd->data, len - COMMAND_HEADER_LENGTH);
	}
//	*(buf + len - 1) = inet_Calc_BCC(pcmd->data, (WORD)(len - COMMAND_HEADER_LENGTH));
	send(s, buf, len, 0);
	free(buf);
}



void inet_Save_File_To_Local(SOCKET s, PTF_COMMAND pcmd)
{
	char * fname = NULL;
	PWORD fnlen = 0;
	char * fdir = NULL;
	WORD len = (WORD)pcmd->low + (WORD)pcmd->high * 256;
	PDWORD fsize = 0;
	DWORD dwRead = 0;
	PTRAN_LIST p = net_SearchItemFromListBySocket(s);
	if (p)
	{
		if (!p->context->ctrl)
		{
			p->context->ctrl = malloc(sizeof(TRAN_CTRL));
			memset(p->context->ctrl, 0, sizeof(TRAN_CTRL));
		}
		fname = malloc(1024);
		memset(fname, 0, 1024);
		fnlen = malloc(sizeof(WORD));
		fsize = malloc(sizeof(DWORD));
		if (p->context->hfile == INVALID_HANDLE_VALUE)
		{
			if (inet_Extract_FileName_From_Buffer(
								pcmd->data,
								len,
								fname,
								fnlen,
								fsize) == 0)
			{
				len = strlen(inet_Local_Dir) + 1 + *fsize + 1;
				fdir = malloc(len);
				memset(fdir, 0, len);
				memcpy(fdir, inet_Local_Dir, strlen(inet_Local_Dir));
				if (*(inet_Local_Dir + strlen(inet_Local_Dir) - 1) != '\\')
				{
					*(fdir + strlen(inet_Local_Dir)) = '\\';
					memcpy(fdir + strlen(inet_Local_Dir) + 1, fname, *fnlen);
				}
				else
				{
					memcpy(fdir + strlen(inet_Local_Dir), fname, *fnlen);
				}
				memset(fname, 0, 1024);
				memcpy(fname, fdir, strlen(fdir));
				free(fdir);
			}
			p->context->hfile = CreateFile(
												fname,
												GENERIC_READ | GENERIC_WRITE,
												FILE_SHARE_READ | FILE_SHARE_WRITE,
												NULL,
												OPEN_ALWAYS,
												FILE_ATTRIBUTE_NORMAL,
												NULL);
			if (p->context->ctrl->status == TRAN_STOP)
			{
				if (pcmd->data)
				{
					free(pcmd->data);
				}
				pcmd->opcode = RET_SUCCESS;
				p->context->ctrl->fsize = *fsize;
				pcmd->data = malloc(1);
				pcmd->low = 1;
				pcmd->high = 0;
				*(pcmd->data + 0) = TRAN_SYN;
				inet_Reply_Remote(p->context->sock, pcmd);
				p->context->ctrl->status = TRAN_START;
			}
		}
		else
		{
			WriteFile(
						p->context->hfile,
						pcmd->data,
						pcmd->low + pcmd->high * 256,
						&dwRead,
						NULL);

			pcmd->low = 0;
			pcmd->high = 0;
			free(pcmd->data);
			pcmd->data = NULL;
			pcmd->opcode = RET_SUCCESS;

			inet_Reply_Remote(p->context->sock, pcmd);
			p->context->ctrl->offset += dwRead;
			if (p->context->ctrl->offset == p->context->ctrl->fsize)
			{
				CloseHandle(p->context->hfile);
				p->context->hfile = INVALID_HANDLE_VALUE;
				free(p->context->ctrl);
				p->context->ctrl = NULL;
			}
		}
		free(fname);
		free(fnlen);
		free(fsize);
	}
}

DWORD inet_Process_Remote_Command(SOCKET s, PTF_COMMAND pcmd)
{
	switch (pcmd->cmd)
	{
	case	TRAN_REQ_READ:			//remote request read data from local
		switch (pcmd->opcode)
		{
		case	TRAN_REQ_DATA:		//get file
			break;
		case	TRAN_REQ_DIR:		//get directory information
			break;
		default:
			break;
		}
		break;
	case	TRAN_REQ_WRITE:			//remote request write data to local
		switch (pcmd->opcode)
		{
		case	TRAN_REQ_DATA:		//receive file
			inet_Save_File_To_Local(s, pcmd);
			break;
		default:
			break;
		}
		break;
	}
	free(pcmd);
	return RET_SUCCESS;
}


DWORD inet_Recv_Remote_Data(SOCKET sock)
{
	int buflen, ret = -1;
	PBYTE buf = NULL;
	BYTE headercnt = 0, dat = 0;
	PTF_COMMAND cmd = NULL;
	PTRAN_LIST p = net_SearchItemFromListBySocket(sock);
	ioctlsocket(sock, FIONREAD, (u_long *)&buflen);
	if (buflen > 0)
	{
		buf = malloc(buflen);
		ret = recv(sock, buf, buflen, 0);
		if (ret != buflen)
		{
			ret = RET_FAILURE | 0x01;
			free(buf);
			return ret;
		}
		ret = 0;
		cmd = malloc(sizeof(TF_COMMAND));
		INIT_CMD(cmd);
		while (ret < buflen)
		{
			dat = *(buf + ret);
			switch (headercnt)
			{
			case	0:			//command header
				if (dat == COMMAND_HEADER)
				{
					cmd->header = dat;
					headercnt ++;
				}
				break;
			case	1:			//command name
				if (INVALID_COMMAND(dat))
				{
					cmd->cmd = dat;
					headercnt ++;
				}
				else
				{
					memset(cmd, 0, sizeof(TF_COMMAND));
				}
				break;
			case	2:			//command sequence
				cmd->seq = dat;
				headercnt ++;
				break;
			case	3:			//command opcode
				cmd->opcode = dat;
				headercnt ++;
				break;
			case	4:			//command data length low byte
				cmd->low = dat;
				headercnt ++;
				break;
			case	5:			//command data length high byte
				cmd->high = dat;
				headercnt ++;
				break;
			case	6:			//command data context
				headercnt ++;
				break;
			}
			if (headercnt >= COMMAND_HEADER_LENGTH)
			{
				break;
			}
			ret ++;
		}
		if (headercnt >= COMMAND_HEADER_LENGTH)
		{
			buflen = cmd->low + (int)cmd->high * 256;
			if (buflen > 0)
			{
				cmd->data = malloc(buflen);
				memcpy(cmd->data, buf + ret, buflen);
			}
			//check the bcc of the command data context here
			ret = (int)inet_Process_Remote_Command(sock, cmd);
		}
		else
		{
			cmd->low = 1;
			cmd->high = 0;
			cmd->data = malloc(1);
			*(cmd->data) = RET_FAILURE;
			inet_Reply_Remote(sock, cmd);
		}
		free(buf);
		buf = NULL;
	}
	return (DWORD)ret;
}


DWORD inet_Write_Data(SOCKET sock)
{
	return RET_SUCCESS;
}


DWORD inet_Remote_Close(SOCKET sock)
{
	PTRAN_LIST p = net_SearchItemFromListBySocket(sock);
	net_DisposeListItemByItem(p->context);
	return RET_SUCCESS;
}


DWORD WINAPI net_Event(PNETSOCKETMESSAGE msg)
{
	DWORD ret = 0;
	switch (msg->event)
	{
		case	FD_ACCEPT:
		case	FD_CONNECT:
			ret = inet_Accept_Connect(msg->sock);
			break;
		case	FD_READ:
			ret = inet_Recv_Remote_Data(msg->sock);
			break;
		case	FD_WRITE:
			ret = inet_Write_Data(msg->sock);
			break;
		case	FD_CLOSE:
			ret = inet_Remote_Close(msg->sock);
			break;
		default:
			break;
	}
	return ret;
}





DWORD WINAPI net_Initialization(PBYTE dir, HWND hwnd, WORD port)
{
	int ret = -1;
	SOCKADDR_IN addr;
	WSAStartup(0x0101, inet_WsaData);
	inet_Local_Dir = malloc(strlen(dir) + 1);
	memset(inet_Local_Dir, 0, strlen(dir) + 1);
	memcpy(inet_Local_Dir, dir, strlen(dir));
	addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	addr.sin_family = AF_INET;
	addr.sin_port = htons(port);
	inet_Listen_Socket = socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
	if (inet_Listen_Socket != INVALID_SOCKET)
	{
		ret = bind(inet_Listen_Socket, (struct sockaddr *)&addr, sizeof(SOCKADDR_IN));
		if (ret == 0)
		{
			ret = listen(inet_Listen_Socket, 1024);
			if (ret == 0)
			{
				ret = WSAAsyncSelect(inet_Listen_Socket, hwnd, CM_SOCKETMESSAGE, 63);
			}
		}
	}
	if (ret != 0)
	{
		closesocket(inet_Listen_Socket);
		inet_Listen_Socket = INVALID_SOCKET;
	}
	return (DWORD)ret;
}


DWORD WINAPI net_Finalization()
{
	net_RemoveList();
	if (inet_Listen_Socket != INVALID_SOCKET)
	{
		closesocket(inet_Listen_Socket);
		inet_Listen_Socket = INVALID_SOCKET;
	}
	WSACleanup();
	return RET_SUCCESS;
}


#endif	//__TRANSFER_FILE_C__

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合中文字幕国产 | 九九视频精品免费| 风流少妇一区二区| 欧美色图第一页| 欧美激情一二三区| 美女网站色91| 欧美视频在线不卡| 欧美激情一区不卡| 国产一区二区三区| 日韩一级片网站| 亚洲一线二线三线久久久| 成人免费视频国产在线观看| 欧美一二三在线| 亚洲不卡在线观看| 在线观看三级视频欧美| 国产精品久久久久一区二区三区共| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产亚洲精品7777| 久久国产精品色婷婷| 91麻豆精品国产自产在线| 一区二区三区在线观看欧美| 国产白丝网站精品污在线入口| 欧美一区二区视频观看视频| 亚洲高清久久久| 欧美无砖砖区免费| 亚洲自拍欧美精品| 欧美羞羞免费网站| 亚洲一区二区三区国产| 在线观看一区二区精品视频| 一区二区三区在线不卡| 一本色道亚洲精品aⅴ| 亚洲日本丝袜连裤袜办公室| a在线欧美一区| 亚洲人成精品久久久久| 92国产精品观看| 亚洲精品老司机| 91精彩视频在线观看| 亚洲一二三四区不卡| 欧美色综合网站| 青青草国产成人99久久| 欧美xxxx老人做受| 国产精品一区一区| 国产精品情趣视频| 91精品1区2区| 蜜臀精品久久久久久蜜臀| 久久尤物电影视频在线观看| 国产乱对白刺激视频不卡| 国产欧美中文在线| 91麻豆蜜桃一区二区三区| 亚洲一区二区三区爽爽爽爽爽| 欧美性xxxxx极品少妇| 午夜精品一区二区三区三上悠亚| 日韩精品一区二区在线观看| 国产精品伊人色| 亚洲一区中文日韩| 精品久久国产字幕高潮| 成人午夜免费av| 一区二区三区精密机械公司| 欧美二区三区91| 国产原创一区二区三区| 国产精品成人一区二区三区夜夜夜 | 久久精品一区二区三区不卡牛牛| 国产高清精品在线| 亚洲一二三专区| 国产亚洲1区2区3区| 色综合一个色综合亚洲| 精品亚洲成av人在线观看| 国产精品大尺度| 日韩午夜激情电影| 91色视频在线| 久久99久久精品| 亚洲欧美一区二区久久| 欧美一区二区大片| 99re这里只有精品视频首页| 免费观看日韩电影| 亚洲免费在线电影| 久久亚洲捆绑美女| 欧美日韩一卡二卡三卡| 成人福利视频在线| 久久91精品久久久久久秒播| 自拍视频在线观看一区二区| 欧美大尺度电影在线| 91国产成人在线| 国产91精品露脸国语对白| 五月婷婷综合在线| 亚洲精品少妇30p| 国产日韩欧美制服另类| 欧美一区二区在线免费观看| 91麻豆swag| 白白色 亚洲乱淫| 国产精品主播直播| 秋霞av亚洲一区二区三| 亚洲成人一二三| 国产精品素人视频| 久久夜色精品一区| 日韩你懂的在线播放| 欧美三级在线播放| 欧美中文字幕一区二区三区亚洲| 暴力调教一区二区三区| 成人在线视频一区| 国产sm精品调教视频网站| 经典三级在线一区| 免费观看日韩电影| 伦理电影国产精品| 毛片av一区二区| 亚洲一卡二卡三卡四卡五卡| 亚洲卡通动漫在线| 亚洲美女在线国产| 亚洲日穴在线视频| 亚洲激情av在线| 一区二区成人在线| 亚洲综合成人在线视频| 亚洲在线免费播放| 亚洲成人免费在线观看| 一区二区三区在线观看视频| 伊人一区二区三区| 一区二区三区视频在线观看| 亚洲激情成人在线| 亚洲6080在线| 麻豆91免费观看| 激情六月婷婷久久| 粉嫩一区二区三区性色av| 成人app下载| 欧洲一区二区三区在线| 欧美性受xxxx黑人xyx| 欧美群妇大交群的观看方式| 91.xcao| 久久久青草青青国产亚洲免观| 欧美精品一区二区在线播放| 久久奇米777| 国产精品家庭影院| 亚洲一区二区三区中文字幕在线| 亚洲国产综合人成综合网站| 日本最新不卡在线| 国产一区二区三区免费观看| 国产成人综合亚洲91猫咪| 99r国产精品| 欧美一区二区三区在线| 久久日韩粉嫩一区二区三区| ㊣最新国产の精品bt伙计久久| 亚洲一区二区免费视频| 美美哒免费高清在线观看视频一区二区| 国产在线日韩欧美| 色综合久久99| 精品乱人伦小说| 亚洲欧美在线观看| 亚洲成人三级小说| 成人午夜精品一区二区三区| 在线观看亚洲一区| 欧美精品一区二区三区蜜桃视频 | 欧美不卡一区二区三区四区| 国产日产欧产精品推荐色 | 欧美日韩1234| 欧美激情资源网| 天天亚洲美女在线视频| 国产一区二区三区综合| 精品视频在线免费| 国产三级精品三级| 午夜精品久久久久久久久| 国产一区二区三区日韩| 欧美无砖砖区免费| 国产精品久久三区| 久久成人免费电影| 欧美色图第一页| 中文字幕在线一区二区三区| 青青草97国产精品免费观看| 91蜜桃网址入口| 久久久久久久国产精品影院| 亚洲一区二区三区国产| 成人av片在线观看| 亚洲精品一区二区三区精华液| 亚洲午夜三级在线| 99re亚洲国产精品| 久久久久88色偷偷免费| 日本中文在线一区| 欧美日韩大陆在线| 国产精品国产自产拍在线| 国产精品一线二线三线精华| 日韩视频123| 三级在线观看一区二区| 97精品久久久午夜一区二区三区| 亚洲精品一线二线三线无人区| 日韩精品久久理论片| 91国产免费观看| 亚洲区小说区图片区qvod| 国产精品一区二区在线观看不卡| 91麻豆精品国产91久久久| 亚洲午夜视频在线| 在线观看欧美日本| 亚洲精品欧美二区三区中文字幕| 国产91在线观看丝袜| 日本一区二区高清| 国产成人午夜精品影院观看视频| 日韩欧美高清一区| 捆绑变态av一区二区三区| 在线综合视频播放| 美腿丝袜在线亚洲一区| 日韩欧美自拍偷拍| 激情五月婷婷综合| 欧美精品一区二区三区四区|