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

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

?? server.cpp

?? 本程序是網絡編程部分
?? CPP
字號:
/********************************************************************
created:	2006/07/28
filename: 	Server.cpp
author:		李創
http://www.cppblog.com/converse/

purpose:	
*********************************************************************/

#pragma comment(lib, "WS2_32")

#include <WinSock2.h>
#include <stdio.h>
#include <assert.h>
#include "../CommonDef.h"

char	g_szNewFileName[MAXFILEDIRLENGTH];
char	g_szBuff[MAX_PACKET_SIZE + 1];
long	g_lLength;
char*	g_pBuff = NULL;

// 初始化socket庫
bool InitSocket();
// 關閉socket庫
bool CloseSocket();
// 解析消息進行相應的處理
bool ProcessMsg(SOCKET sClient);
// 監聽Client的消息
void ListenToClient();
// 打開文件
bool OpenFile(CCSDef::TMSG_HEADER* pMsgHeader, SOCKET sClient);
// 傳送文件
bool SendFile(SOCKET sClient);
// 讀取文件進入緩沖區
bool ReadFile(SOCKET sClient);

int main()
{
	InitSocket();
	ListenToClient();
	CloseSocket();

	return 0;
}

void ListenToClient()
{
	// 創建socket套接字
	SOCKET sListen = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (SOCKET_ERROR == sListen)
	{
		printf("Init Socket Error!\n");
		return;
	}

	// 綁定socket到一個本地地址
	sockaddr_in sin;
	sin.sin_family	= AF_INET;
	sin.sin_port	= htons(PORT);
	sin.sin_addr.S_un.S_addr = INADDR_ANY;
	if (::bind(sListen, (LPSOCKADDR)&sin, sizeof(sockaddr_in)) == SOCKET_ERROR)
	{
		printf("Bind Error!\n");
		return;
	}

	// 設置socket進入監聽狀態
	if (::listen(sListen, 10) == SOCKET_ERROR)
	{
		printf("Listen Error!\n");
		return;
	}

	printf("Listening To Client...\n");

	// 循環接收client端的連接請求
	sockaddr_in ClientAddr;
	int nAddrLen = sizeof(sockaddr_in);
	SOCKET sClient;

	while (INVALID_SOCKET == (sClient = ::accept(sListen, (sockaddr*)&ClientAddr, &nAddrLen)))
	{
	}

	while (true == ProcessMsg(sClient))
	{
	}

	// 關閉同客戶端的連接
	::closesocket(sClient);

	::closesocket(sListen);
}

bool InitSocket()
{
	// 初始化socket dll
	WSADATA wsaData;
	WORD socketVersion = MAKEWORD(2, 2);
	if (::WSAStartup(socketVersion, &wsaData) != 0)
	{
		printf("Init socket dll error\n");
		return false;
	}

	return true;
}

bool CloseSocket()
{
	// 釋放winsock庫
	::WSACleanup();

	if (NULL != g_pBuff)
	{
		delete [] g_pBuff;
		g_pBuff = NULL;
	}

	return true;
}

bool ProcessMsg(SOCKET sClient)
{
	int nRecv = ::recv(sClient, g_szBuff, MAX_PACKET_SIZE + 1, 0);
	if (nRecv > 0)
	{
		g_szBuff[nRecv] = '\0';
	}

	// 解析命令
	CCSDef::TMSG_HEADER* pMsgHeader = (CCSDef::TMSG_HEADER*)g_szBuff;
	switch (pMsgHeader->cMsgID)
	{
	case MSG_FILENAME:			// 文件名
		{
			OpenFile(pMsgHeader, sClient);
		}
		break;
	case MSG_CLIENT_READY:		// 客戶端準備好了,開始傳送文件
		{
			SendFile(sClient);
		}
		break;
	case MSG_SENDFILESUCCESS:	// 傳送文件成功
		{
			printf("Send File Success!\n");
			return false;
		}
		break;
	case MSG_FILEALREADYEXIT_ERROR:	// 要保存的文件已經存在了
		{
			printf("The file reay to send already exit!\n");
			return false;
		}
		break;
	}

	return true;
}

bool ReadFile(SOCKET sClient)
{
	if (NULL != g_pBuff)
	{
		return true;
	}

	// 打開文件
	FILE *pFile;
	if (NULL == (pFile = fopen(g_szNewFileName, "rb")))		// 打開文件失敗
	{
		printf("Cannot find the file, request the client input file name again\n");
		CCSDef::TMSG_ERROR_MSG tMsgErrorMsg(MSG_OPENFILE_ERROR);
		::send(sClient, (char*)(&tMsgErrorMsg), sizeof(CCSDef::TMSG_ERROR_MSG), 0);
		return false;
	}

	// 把文件的長度傳回到client去
	fseek(pFile, 0, SEEK_END);
	g_lLength = ftell(pFile);
	printf("File Length = %d\n", g_lLength);
	CCSDef::TMSG_FILELENGTH tMsgFileLength(g_lLength);
	::send(sClient, (char*)(&tMsgFileLength), sizeof(CCSDef::TMSG_FILELENGTH), 0);

	// 處理文件全路徑名,把文件名分解出來
	char szDrive[_MAX_DRIVE], szDir[_MAX_DIR], szFname[_MAX_FNAME], szExt[_MAX_EXT];
	_splitpath(g_szNewFileName, szDrive, szDir, szFname, szExt);
	strcat(szFname,szExt);
	CCSDef::TMSG_FILENAME tMsgFileName;
	strcpy(tMsgFileName.szFileName, szFname);
	printf("Send File Name: %s\n", tMsgFileName.szFileName);
	::send(sClient, (char*)(&tMsgFileName), sizeof(CCSDef::TMSG_FILENAME), 0);

	// 分配緩沖區讀取文件內容
	g_pBuff = new char[g_lLength + 1];
	if (NULL == g_pBuff)
	{
		return false;
	}

	fseek(pFile, 0, SEEK_SET);
	fread(g_pBuff, sizeof(char), g_lLength, pFile);
	g_pBuff[g_lLength] = '\0';
	fclose(pFile);

	return true;
}

// 打開文件
bool OpenFile(CCSDef::TMSG_HEADER* pMsgHeader, SOCKET sClient)
{
	CCSDef::TMSG_FILENAME* pRequestFilenameMsg = (CCSDef::TMSG_FILENAME*)pMsgHeader;

	// 對文件路徑名進行一些處理
	char *p1, *p2;
	for (p1 = pRequestFilenameMsg->szFileName, p2 = g_szNewFileName;
		'\0' != *p1;
		++p1, ++p2)
	{
		if ('\n' != *p1)
		{
			*p2 = *p1;
		}
		if ('\\' == *p2)
		{
			*(++p2) = '\\';
		}
	}
	*p2 = '\0';

	ReadFile(sClient);

	return true;
}

// 傳送文件
bool SendFile(SOCKET sClient)
{
	if (NULL == g_pBuff)
	{
		ReadFile(sClient);
	}

	int nPacketBufferSize = MAX_PACKET_SIZE - 2 * sizeof(int);	// 每個數據包存放文件的buffer大小
	// 如果文件的長度大于每個數據包所能傳送的buffer長度那么就分塊傳送
	for (int i = 0; i < g_lLength; i += nPacketBufferSize)
	{		
		CCSDef::TMSG_FILE tMsgFile;
		tMsgFile.tFile.nStart = i;
		if (i + nPacketBufferSize + 1> g_lLength)
		{
			tMsgFile.tFile.nSize  = g_lLength - i;
		}
		else
		{
			tMsgFile.tFile.nSize  = nPacketBufferSize;
		}
		//printf("start = %d, size = %d\n", tMsgFile.tFile.nStart, tMsgFile.tFile.nSize);
		memcpy(tMsgFile.tFile.szBuff, g_pBuff + tMsgFile.tFile.nStart, tMsgFile.tFile.nSize);
		::send(sClient, (char*)(&tMsgFile), sizeof(CCSDef::TMSG_FILE), 0);
		Sleep(0.5);
	}

	delete [] g_pBuff;
	g_pBuff = NULL;

	return true;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久亚洲精华国产精华液 | 欧美一区二区三区视频在线观看| 欧美视频在线观看一区二区| 日韩欧美国产高清| 久久九九全国免费| 亚洲综合视频在线| 国产麻豆精品久久一二三| www.爱久久.com| 91精品免费在线观看| 日本一区二区综合亚洲| 天堂一区二区在线| 粉嫩aⅴ一区二区三区四区五区 | 亚洲裸体在线观看| 蜜臀91精品一区二区三区| www.一区二区| 精品国产凹凸成av人网站| 亚洲欧美一区二区三区极速播放 | 首页国产丝袜综合| 成人va在线观看| 91精品婷婷国产综合久久竹菊| 国产精品麻豆网站| 亚洲精品亚洲人成人网| 国产综合久久久久久久久久久久 | 欧美日韩成人在线一区| 欧美xxxx在线观看| 亚洲综合区在线| 成人国产精品免费观看动漫| 日韩一区二区三区av| 亚洲人成人一区二区在线观看 | 一区二区高清免费观看影视大全| 免费不卡在线视频| 欧美午夜影院一区| 亚洲丝袜美腿综合| 风间由美一区二区三区在线观看| 日韩欧美亚洲国产精品字幕久久久 | caoporm超碰国产精品| 久久综合狠狠综合久久综合88 | ●精品国产综合乱码久久久久| 青青草国产精品亚洲专区无| 色综合久久中文字幕综合网| 亚洲美女少妇撒尿| 欧美三级在线看| 免费黄网站欧美| 日韩色在线观看| 国产福利一区在线| 成人欧美一区二区三区小说| 色诱视频网站一区| 午夜精品久久久久久不卡8050| 欧美日韩国产a| 黑人巨大精品欧美黑白配亚洲| 久久一二三国产| 不卡一区二区中文字幕| 亚洲综合在线第一页| 日韩欧美一级片| 成人黄页在线观看| 亚洲一区二区三区中文字幕在线| 欧美一区二区在线视频| 国产美女在线观看一区| 亚洲美女视频一区| 日韩一区二区精品葵司在线| 成人综合在线观看| 亚洲午夜一区二区| 日韩久久免费av| 99精品在线免费| 免费人成精品欧美精品| 国产精品美女久久久久高潮| 欧美视频中文一区二区三区在线观看| 蜜臀av性久久久久蜜臀aⅴ| 欧美经典一区二区三区| 欧美影院一区二区三区| 国产精品影视在线| 亚洲高清中文字幕| 欧美激情综合五月色丁香| 欧美日韩在线不卡| 国产成人av影院| 五月综合激情婷婷六月色窝| 国产精品女同一区二区三区| 欧美久久高跟鞋激| 91在线精品秘密一区二区| 奇米在线7777在线精品| 最新不卡av在线| xf在线a精品一区二区视频网站| 色一情一乱一乱一91av| 国产乱人伦精品一区二区在线观看| 亚洲摸摸操操av| 欧美激情综合网| 亚洲福利视频一区二区| 欧美男女性生活在线直播观看| 国产女人aaa级久久久级| 久久国内精品视频| 88在线观看91蜜桃国自产| 婷婷一区二区三区| 欧美人与z0zoxxxx视频| 香蕉乱码成人久久天堂爱免费| 欧美精品色一区二区三区| 天使萌一区二区三区免费观看| 日韩你懂的电影在线观看| 日韩不卡在线观看日韩不卡视频| 国产清纯美女被跳蛋高潮一区二区久久w | 国产精品每日更新在线播放网址| 91精品免费在线观看| 91福利社在线观看| 成人ar影院免费观看视频| 久久精品99国产精品| 婷婷国产在线综合| 亚洲国产精品一区二区久久恐怖片| 中文字幕亚洲综合久久菠萝蜜| 久久久一区二区| 精品嫩草影院久久| 日韩欧美在线不卡| 欧美一区二区视频在线观看2022| 欧美在线小视频| 在线中文字幕一区二区| 日本韩国欧美在线| 在线观看一区二区视频| 欧洲一区二区av| 在线亚洲免费视频| 在线亚洲一区二区| 在线观看成人免费视频| 色8久久人人97超碰香蕉987| 91视视频在线观看入口直接观看www | www.亚洲色图| 99精品久久久久久| 色激情天天射综合网| 欧美色窝79yyyycom| 欧美日韩精品欧美日韩精品一 | 欧美丝袜自拍制服另类| 在线视频一区二区三| 欧美午夜在线观看| 91精品在线麻豆| 久久久久久久久久久久电影| 欧美国产国产综合| 亚洲欧美偷拍另类a∨色屁股| 一区二区三区国产豹纹内裤在线| 一区二区三区不卡在线观看| 亚洲大片一区二区三区| 国产精品久久久久久久久快鸭 | 欧美一区二区三区小说| av午夜精品一区二区三区| 国产一区欧美二区| 蜜桃一区二区三区四区| 国产精品一品视频| 丁香网亚洲国际| 97精品久久久午夜一区二区三区| 欧美一a一片一级一片| 一区二区三区成人| 蜜臀av一区二区在线免费观看 | 美女www一区二区| 成人久久视频在线观看| 欧美日韩精品福利| 国产午夜精品一区二区三区四区| 亚洲欧洲日韩综合一区二区| 午夜欧美视频在线观看| 国产99久久久国产精品潘金 | 26uuu久久天堂性欧美| 国产精品久久久久久久久免费桃花 | 亚洲裸体在线观看| 美女网站一区二区| 91年精品国产| 精品成人一区二区| 亚洲综合一二区| 国产成+人+日韩+欧美+亚洲| 欧美色视频在线观看| 国产欧美精品一区aⅴ影院| 五月天亚洲精品| 成人黄色国产精品网站大全在线免费观看| 欧美男生操女生| 国产精品欧美极品| 黑人精品欧美一区二区蜜桃 | 日韩国产欧美三级| 99久久精品免费| 亚洲精品一区二区三区福利 | 国产夫妻精品视频| 在线观看91av| 亚洲午夜久久久久久久久久久 | 国产精品一二二区| 欧美精品日韩综合在线| 亚洲精品国产视频| 99久久久久免费精品国产| 久久老女人爱爱| 日本不卡123| 欧美日韩中文字幕精品| 国产精品久久99| 国产成人午夜精品影院观看视频 | 国产精品国产三级国产普通话三级 | 色综合中文字幕| 国产三级精品在线| 福利一区二区在线观看| 国产精品电影一区二区三区| 国产真实乱子伦精品视频| 国产日韩欧美一区二区三区综合| 色久综合一二码| 色综合网站在线| 亚洲欧美在线另类| 成人激情图片网| 国产精品免费观看视频| 国产成人精品免费| 国产欧美日韩在线观看| 国产精品99久久久久久似苏梦涵| 日韩欧美成人一区|