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

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

?? p2pserver.cpp

?? UDP穿越NAT源代碼,UDP穿越NAT源代碼
?? CPP
字號:
/* P2P 程序服務端
 * 
 * 文件名:P2PServer.c
 *
 * 日期:2004-5-21
 *
 * 作者:shootingstars(zhouhuis22@sina.com)
 *
 */
#pragma comment(lib, "ws2_32.lib")

#include "windows.h"
#include "..\proto.h"
#include "..\Exception.h"

UserList ClientList;

void InitWinSock()
{
	WSADATA wsaData;

	if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
	{
		printf("Windows sockets 2.2 startup");
		throw Exception("");
	}
	else{
		printf("Using %s (Status: %s)\n",
			wsaData.szDescription, wsaData.szSystemStatus);
		printf("with API versions %d.%d to %d.%d\n\n",
			LOBYTE(wsaData.wVersion), HIBYTE(wsaData.wVersion),
			LOBYTE(wsaData.wHighVersion), HIBYTE(wsaData.wHighVersion));
		
	}
}

SOCKET mksock(int type)
{
	SOCKET sock = socket(AF_INET, type, 0);
	if (sock < 0)
	{
        printf("create socket error");
		throw Exception("");
	}
	return sock;
}

stUserListNode GetUser(char *username)
{
	for(UserList::iterator UserIterator=ClientList.begin();
						UserIterator!=ClientList.end();
							++UserIterator)
	{
		if( strcmp( ((*UserIterator)->userName), username) == 0 )
			return *(*UserIterator);
	}
	throw Exception("not find this user");
}

int main(int argc, char* argv[])
{
	try{
		InitWinSock();
		
		SOCKET PrimaryUDP;
		PrimaryUDP = mksock(SOCK_DGRAM);

		sockaddr_in local;
		local.sin_family=AF_INET;
		local.sin_port= htons(SERVER_PORT); 
		local.sin_addr.s_addr = htonl(INADDR_ANY);
		int nResult=bind(PrimaryUDP,(sockaddr*)&local,sizeof(sockaddr));
		if(nResult==SOCKET_ERROR)
			throw Exception("bind error");

		sockaddr_in sender;
		stMessage recvbuf;
		memset(&recvbuf,0,sizeof(stMessage));

		// 開始主循環.
		// 主循環負責下面幾件事情:
		// 一:讀取客戶端登陸和登出消息,記錄客戶列表
		// 二:轉發客戶p2p請求
		for(;;)
		{
			int dwSender = sizeof(sender);
			int ret = recvfrom(PrimaryUDP, (char *)&recvbuf, sizeof(stMessage), 0, (sockaddr *)&sender, &dwSender);
			if(ret <= 0)
			{
				printf("recv error");
				continue;
			}
			else
			{
				int messageType = recvbuf.iMessageType;
				switch(messageType){
				case LOGIN:
					{
						//  將這個用戶的信息記錄到用戶列表中
						printf("has a user login : %s\n", recvbuf.message.loginmember.userName);
						stUserListNode *currentuser = new stUserListNode();
						strcpy(currentuser->userName, recvbuf.message.loginmember.userName);
						currentuser->ip = ntohl(sender.sin_addr.S_un.S_addr);
						currentuser->port = ntohs(sender.sin_port);
						
						ClientList.push_back(currentuser);

						// 發送已經登陸的客戶信息
						int nodecount = (int)ClientList.size();
						sendto(PrimaryUDP, (const char*)&nodecount, sizeof(int), 0, (const sockaddr*)&sender, sizeof(sender));
						for(UserList::iterator UserIterator=ClientList.begin();
								UserIterator!=ClientList.end();
								++UserIterator)
						{
							sendto(PrimaryUDP, (const char*)(*UserIterator), sizeof(stUserListNode), 0, (const sockaddr*)&sender, sizeof(sender)); 
						}

						break;
					}
				case LOGOUT:
					{
						// 將此客戶信息刪除
						printf("has a user logout : %s\n", recvbuf.message.logoutmember.userName);
						UserList::iterator removeiterator = NULL;
						for(UserList::iterator UserIterator=ClientList.begin();
							UserIterator!=ClientList.end();
							++UserIterator)
						{
							if( strcmp( ((*UserIterator)->userName), recvbuf.message.logoutmember.userName) == 0 )
							{
								removeiterator = UserIterator;
								break;
							}
						}
						if(removeiterator != NULL)
							ClientList.remove(*removeiterator);
						break;
					}
				case P2PTRANS:
					{
						// 某個客戶希望服務端向另外一個客戶發送一個打洞消息
						printf("%s wants to p2p %s\n",inet_ntoa(sender.sin_addr),recvbuf.message.translatemessage.userName);
						stUserListNode node = GetUser(recvbuf.message.translatemessage.userName);
						sockaddr_in remote;
						remote.sin_family=AF_INET;
						remote.sin_port= htons(node.port); 
						remote.sin_addr.s_addr = htonl(node.ip);

						in_addr tmp;
						tmp.S_un.S_addr = htonl(node.ip);
						printf("the address is %s,and port is %d\n",inet_ntoa(tmp), node.port);

						stP2PMessage transMessage;
						transMessage.iMessageType = P2PSOMEONEWANTTOCALLYOU;
						transMessage.iStringLen = ntohl(sender.sin_addr.S_un.S_addr);
						transMessage.Port = ntohs(sender.sin_port);
                        
						sendto(PrimaryUDP,(const char*)&transMessage, sizeof(transMessage), 0, (const sockaddr *)&remote, sizeof(remote));

						break;
					}
				
				case GETALLUSER:
					{
						int command = GETALLUSER;
						sendto(PrimaryUDP, (const char*)&command, sizeof(int), 0, (const sockaddr*)&sender, sizeof(sender));

						int nodecount = (int)ClientList.size();
						sendto(PrimaryUDP, (const char*)&nodecount, sizeof(int), 0, (const sockaddr*)&sender, sizeof(sender));

						for(UserList::iterator UserIterator=ClientList.begin();
								UserIterator!=ClientList.end();
								++UserIterator)
						{
							sendto(PrimaryUDP, (const char*)(*UserIterator), sizeof(stUserListNode), 0, (const sockaddr*)&sender, sizeof(sender)); 
						}
						break;
					}
				}
			}
		}

	}
	catch(Exception &e)
	{
		printf(e.GetMessage());
		return 1;
	}

	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人动漫一区二区| 日韩理论在线观看| 色综合欧美在线| 九九国产精品视频| 亚洲电影在线免费观看| 国产精品欧美久久久久一区二区| 色悠悠亚洲一区二区| 五月天中文字幕一区二区| 国产精品久久久久久久浪潮网站| 精品国产乱码久久久久久影片| 欧美日韩精品欧美日韩精品一| 91亚洲精品乱码久久久久久蜜桃 | 午夜精品免费在线观看| 亚洲欧洲在线观看av| 国产亚洲女人久久久久毛片| 精品久久久久久久一区二区蜜臀| 欧美高清精品3d| 成人av第一页| proumb性欧美在线观看| 国产suv精品一区二区6| 国产激情视频一区二区三区欧美| 一区二区三区四区乱视频| 国产精品美女一区二区在线观看| 国产女主播在线一区二区| 欧美一级搡bbbb搡bbbb| 欧美日韩国产欧美日美国产精品| 欧美三级乱人伦电影| 91行情网站电视在线观看高清版| 色屁屁一区二区| 在线视频国内一区二区| 欧美色视频在线观看| 欧美久久免费观看| 欧美伦理影视网| 精品国产乱码久久久久久牛牛| 在线观看日韩一区| 91福利区一区二区三区| 欧美精品第一页| 在线成人av网站| 精品88久久久久88久久久| 久久综合九色欧美综合狠狠| 精品久久久网站| 欧美国产激情二区三区| 亚洲欧美另类小说| 一区二区三区精品在线| 五月天激情综合| 国产精品一二三| 91久久线看在观草草青青| 欧美高清性hdvideosex| 久久嫩草精品久久久久| 中文字幕一区二区三区在线播放| 亚洲夂夂婷婷色拍ww47| 亚洲国产精品影院| 激情偷乱视频一区二区三区| 国产精品一卡二卡| 亚洲视频一二三| 久久国产剧场电影| 欧美美女黄视频| 一区二区在线免费观看| 国产成人精品亚洲777人妖 | 国产欧美日韩亚州综合 | 中文字幕免费观看一区| 毛片av中文字幕一区二区| 欧美午夜精品理论片a级按摩| 国产日本亚洲高清| 美女一区二区久久| 91精品国产黑色紧身裤美女| 亚洲一级二级在线| 91女厕偷拍女厕偷拍高清| 国产日韩精品一区二区浪潮av| 精品午夜一区二区三区在线观看| 欧美日韩精品高清| 亚洲一区在线观看免费| 日本韩国欧美一区二区三区| 国产精品美女久久久久久2018| 国产麻豆精品95视频| 久久综合资源网| 国产最新精品免费| 国产人伦精品一区二区| 国产91露脸合集magnet| 中文字幕第一页久久| 成人综合婷婷国产精品久久 | 久久午夜免费电影| 国产最新精品免费| 欧美激情自拍偷拍| 成人美女视频在线观看18| 国产精品久久午夜| eeuss国产一区二区三区| 亚洲欧洲精品天堂一级| 91免费视频观看| 亚洲国产毛片aaaaa无费看| 欧美一区二视频| 国内精品写真在线观看| 亚洲国产成人午夜在线一区| 91网站最新网址| 一区二区高清在线| 91精品免费在线观看| 国内成人精品2018免费看| 国产欧美日韩在线视频| 91麻豆精品在线观看| 香蕉成人伊视频在线观看| 欧美电影在线免费观看| 国产一区二区三区在线观看免费 | 欧美亚洲高清一区| 毛片基地黄久久久久久天堂| 日本一区二区三区久久久久久久久不| 97精品久久久午夜一区二区三区| 一区二区三区四区乱视频| 91精品国产一区二区三区| 国产专区综合网| 一区二区三区在线观看欧美 | 成人免费观看视频| 亚洲一区二区三区四区不卡| 精品国产在天天线2019| 99国产精品久久久久久久久久| 亚洲午夜激情av| 久久精品一区二区三区四区| 91蜜桃免费观看视频| 日本在线不卡视频| 国产精品久久久一区麻豆最新章节| 欧洲生活片亚洲生活在线观看| 麻豆一区二区三区| 一区二区三区电影在线播| 日韩天堂在线观看| 色综合久久中文字幕综合网 | 久久伊人蜜桃av一区二区| 色综合激情五月| 国产在线视频一区二区| 亚洲国产成人tv| 综合在线观看色| 久久综合久久综合亚洲| 欧美日韩成人综合在线一区二区| 国产成人免费视频精品含羞草妖精| 午夜久久久久久久久久一区二区| 国产精品国产三级国产aⅴ中文| 日韩视频一区二区在线观看| 欧洲在线/亚洲| 色婷婷激情久久| 波多野结衣中文字幕一区| 国产综合久久久久久久久久久久 | 亚洲色图欧美偷拍| 欧美一激情一区二区三区| 色综合久久综合网97色综合| 国产激情视频一区二区在线观看 | 成人黄色国产精品网站大全在线免费观看 | 色噜噜偷拍精品综合在线| 成人精品国产一区二区4080| 久久99精品久久久久久| 香蕉久久一区二区不卡无毒影院| 亚洲精品大片www| 亚洲色图欧美激情| 亚洲三级在线免费| 成人欧美一区二区三区| 国产精品动漫网站| 亚洲国产成人在线| 国产精品丝袜久久久久久app| 精品久久五月天| 久久婷婷色综合| 欧美大片顶级少妇| 日韩精品一区二区三区视频在线观看 | 久久日一线二线三线suv| 欧美一级xxx| 精品国产第一区二区三区观看体验| 日韩一区二区三区在线视频| 欧美一三区三区四区免费在线看| 7777精品伊人久久久大香线蕉的 | 一区二区高清免费观看影视大全| 综合在线观看色| 一二三区精品福利视频| 亚洲国产日产av| 日本美女视频一区二区| 日韩不卡在线观看日韩不卡视频| 偷窥少妇高潮呻吟av久久免费| 日韩国产欧美在线播放| 视频一区二区国产| 久久成人综合网| 成人av在线看| 欧美少妇bbb| 精品美女一区二区三区| 国产精品天天看| 一区二区三区在线影院| 日本欧美久久久久免费播放网| 久久99国产精品麻豆| 国产99久久久国产精品潘金| 色综合婷婷久久| 欧美一区二区免费观在线| 精品国产乱码久久久久久免费| 国产精品久久毛片a| 三级亚洲高清视频| 国产高清不卡一区| 欧美吻胸吃奶大尺度电影| 欧美一级欧美三级在线观看| 久久伊99综合婷婷久久伊| 亚洲精品国产高清久久伦理二区| 美女网站一区二区| 波波电影院一区二区三区| 欧美一区二区视频在线观看2022| 国产亚洲综合在线| 亚洲国产sm捆绑调教视频| 国产成人综合在线| 欧美日本在线播放|