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

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

?? telnetserver.cpp

?? VC++語言中級教材,講授網絡編程中語言的運用技術
?? CPP
字號:
#include "TelnetServer.h"

// 構造函數:缺省 (PORT: 23) (MAX_CONNECTS: 100) (CONNECT_MSG: "已連接。") (SERVER_FULL_MSG: "服務器滿...")
TelnetServer::TelnetServer()
{
	setServer(23, 100, "已連接。", "服務器滿...");
}

// 設置服務器參數
TelnetServer::setServer(int nPort, int nMaxConnects, char connectMsg[9999], char serverFullMsg[9999])
{
	int lcv;

	// 限制用戶數在1-100范圍
	if (nMaxConnects < 1) { nMaxConnects = 1; }
	if (nMaxConnects > 100) { nMaxConnects = 100; }

	PORT = nPort;
	MAX_CONNECTS = nMaxConnects;
	CONNECT_MSG[0] = 0;
	SERVER_FULL_MSG[0] = 0;
	sServer = INVALID_SOCKET;
	if (connectMsg[0] != 0)
	{
		strcat(&CONNECT_MSG[0], &connectMsg[0]);
	}
	if (serverFullMsg[0] != 0)
	{
		strcat(&SERVER_FULL_MSG[0], &serverFullMsg[0]);
	}
	
	user = new USER[MAX_CONNECTS + 5];
	for (lcv = 0; lcv < (MAX_CONNECTS + 5); lcv++)
	{
		mMsg[lcv].cMsg[0] = 0;
		mMsg[lcv].nUser = -1;
	}

	for (lcv = 0; lcv < (MAX_CONNECTS + 5); lcv++)
	{
		user[lcv].cName[0] = 0;
		user[lcv].cInput[0] = 0;
		user[lcv].sUser = INVALID_SOCKET;
		user[lcv].user_sin_len = sizeof(user[lcv].user_sin);
	}
}

TelnetServer::~TelnetServer()
{
	//關閉所有的客戶端口
	for (int lcv = 0; lcv < (MAX_CONNECTS + 5); lcv++);
	{
		closeClientSocket(lcv);
	}
	stopListen();
}

// 從隊列中回收到來的消息
MESSAGE TelnetServer::getMessage()
{
	MESSAGE mMessage;
	char *cMsg;

	mMessage.nUser = mMsg[0].nUser;
	mMessage.cMsg[0] = 0;
	if (mMsg[0].cMsg[0] != 0)
	{
		cMsg = &mMessage.cMsg[0];
		strcat(cMsg, &mMsg[0].cMsg[0]);
	}
	for (int lcv = 0; lcv < 99; lcv++)
	{
		mMsg[lcv] = mMsg[lcv + 1];
	}

	return mMessage;
}

// 開始監聽連接
int TelnetServer::startListen()
{
	if (WSAStartup(MAKEWORD(1,1), &WSAData) != 0) { return -1; }
	if ((sServer = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { return -1; }
	server_sin.sin_family = AF_INET;
	server_sin.sin_port = htons (PORT);  
	server_sin.sin_addr.s_addr = htonl (INADDR_ANY);
	if (bind(sServer, (struct sockaddr *) &server_sin, sizeof(server_sin)) == SOCKET_ERROR) 
	{
		stopListen();
		return -1;
	}
	if (listen(sServer, MAX_CONNECTS + 5) == SOCKET_ERROR) 
	{
		stopListen();
		return -1;
	}

	return 0;
}

// 停止監聽連接
void TelnetServer::stopListen()
{
	closesocket(sServer);
	sServer = INVALID_SOCKET;
}

// 關閉通信socket
void TelnetServer::closeClientSocket(int nUser)
{
	shutdown(user[nUser].sUser, 0x02);
	closesocket(user[nUser].sUser);
	user[nUser].sUser = INVALID_SOCKET;
	user[nUser].cName[0] = 0;
	user[nUser].cNote[0] = 0;
}

// 接受連接
void TelnetServer::acceptConnects()
{
	int iConn, lcv, lcv2;
	fd_set fds;
	timeval tTime;

	FD_ZERO(&fds);
	FD_SET(sServer, &fds);
	tTime.tv_sec = 0;
	tTime.tv_usec = 0;
	iConn = select(0, &fds, NULL, NULL, &tTime);
	lcv2 = MAX_CONNECTS + 5;
	while ((iConn) && (lcv2))
	{
		lcv = 0;
		while ((user[lcv].sUser != INVALID_SOCKET) && (lcv < (MAX_CONNECTS + 5))) { lcv++; }
		if (lcv < MAX_CONNECTS)
		{
			user[lcv].sUser = accept(sServer, (struct sockaddr *) &user[lcv].user_sin, (int *) &user[lcv].user_sin_len);
			if (user[lcv].sUser != INVALID_SOCKET)
			{
				sendUser(lcv, &CONNECT_MSG[0]);
			}
		} else {
			user[lcv].sUser = accept(sServer, (struct sockaddr *) &user[lcv].user_sin, (int *) &user[lcv].user_sin_len);
			if (user[lcv].sUser != INVALID_SOCKET)
			{
				sendUser(lcv, &SERVER_FULL_MSG[0]);
				closeClientSocket(lcv);
			}
		}
		iConn = select(0, &fds, NULL, NULL, &tTime);
		lcv2--;
	}
}

// 添加到來的消息到消息隊列中
void TelnetServer::acceptMessages()
{
	int nMsg, lcv, lcv2, lcv3, nAtoI;
	u_long lMsg;
	char cMsg[255], cMsg2[2];
	char *cInput;
	char *ccMsg;

	for (lcv = 0; lcv < MAX_CONNECTS; lcv++)
	{
		nMsg = ioctlsocket(user[lcv].sUser, FIONREAD, &lMsg);
		if ((nMsg == 0) && (lMsg > 0))
		{
			nMsg = recv(user[lcv].sUser, cMsg, 255, 0);
			if ((nMsg != SOCKET_ERROR) && (nMsg != 0))
			{
				for (lcv3 = 0; lcv3 < ((int) strlen(cMsg)); lcv3++)
				{
					nAtoI = (int) cMsg[lcv3];
					if ((cMsg[0] != 0) && (strlen(user[lcv].cInput) < 255) && (nAtoI >31) && (nAtoI < 127))
					{
						cInput = &user[lcv].cInput[0];
						cMsg2[0] = cMsg[lcv3];
						cMsg2[1] = 0;
						strcat(cInput, &cMsg2[0]);
					}
					if (nAtoI == 13)
					{
						lcv2 = 0;
						while (mMsg[lcv2].cMsg[0] != 0) { lcv++; }
						mMsg[lcv2].nUser = lcv;
						ccMsg = &mMsg[lcv2].cMsg[0];
						strcat(ccMsg, &user[lcv].cInput[0]);
						user[lcv].cInput[0] = 0;
					}
					if (nAtoI == 8)
					{
						user[lcv].cInput[(int) strlen(user[lcv].cInput) - 1] = 0;
					}
				}
			}
		}
	}
}

// 從用戶數組中得到用戶信息
USER TelnetServer::getUserInfo(int nUser)
{
	return user[nUser];
}

// 設置用戶名
void TelnetServer::setUserName(int nUser, char cName[19])
{
	user[nUser].cName[0] = 0;
	if (cName[0] != 0)
	{
		strcat(&user[nUser].cName[0], &cName[0]);
	}
}

// 設置用戶通知
void TelnetServer::setUserNote(int nUser, char cNote[256])
{
	user[nUser].cNote[0] = 0;
	if (cNote[0] != 0)
	{
		strcat(&user[nUser].cNote[0], &cNote[0]);
	}
}

// 發送消息到具體的客戶
int TelnetServer::sendUser(int nUser, char cSend[9999])
{
	int nSend;

	nSend = send(user[nUser].sUser, &cSend[0], strlen(cSend) + 1, 0);
	if (nSend == SOCKET_ERROR)
	{
		closeClientSocket(nUser); 
	}

	return nSend;
}

// 發送消息到所有的客戶
void TelnetServer::sendAll(char cSend[9999])
{
	for (int lcv = 0; lcv < MAX_CONNECTS; lcv++)
	{
		sendUser(lcv, &cSend[0]);
	}
}

// 關閉空連接
void TelnetServer::closeEmptySockets()
{
	for (int lcv = 0; lcv < (MAX_CONNECTS + 5); lcv++)
	{
		sendUser(lcv, "");
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩午夜激情视频| 亚洲六月丁香色婷婷综合久久| 欧美精品一区二区三区四区| 国产精品高潮久久久久无| 视频一区中文字幕国产| 99久久婷婷国产综合精品 | 日韩一区二区在线观看| 中文字幕中文字幕一区| 国产乱码一区二区三区| 欧美日韩国产区一| 亚洲精品一二三| 成人av在线影院| 91精品久久久久久久99蜜桃 | 色网综合在线观看| 中文成人av在线| 国产一区二区三区国产| 6080午夜不卡| 午夜精品久久久久久久蜜桃app| 国产高清在线精品| 欧美xxxx老人做受| 麻豆久久久久久| 67194成人在线观看| 丝袜亚洲另类欧美综合| 欧美在线看片a免费观看| 中文字幕亚洲一区二区av在线| 国产精品香蕉一区二区三区| 日韩欧美国产综合| 日本怡春院一区二区| 欧美一区二视频| 青椒成人免费视频| 日韩一区二区视频| 精品一区二区三区欧美| 日韩一区二区三区在线视频| 麻豆精品一区二区三区| 日韩午夜中文字幕| 国产在线视频一区二区| 久久久国产午夜精品| 东方aⅴ免费观看久久av| 久久久国产精品午夜一区ai换脸| 国产二区国产一区在线观看| 国产视频一区二区三区在线观看| 国产精品456| 国产精品久久久久久久浪潮网站| av高清不卡在线| 亚洲最大成人网4388xx| 欧美精品久久天天躁| 国产一区二区不卡| 欧美激情在线观看视频免费| 成人精品国产福利| 一区二区在线观看视频| 欧美日韩亚洲综合| 精品一区二区三区在线观看国产 | 国产三级精品视频| 成人激情开心网| 亚洲精品欧美综合四区| 欧美日韩亚洲另类| 久久se精品一区精品二区| 中文字幕欧美三区| 日本韩国一区二区| 美女免费视频一区二区| 国产精品婷婷午夜在线观看| 欧美少妇bbb| 国产一区 二区 三区一级| 中文字幕一区三区| 3751色影院一区二区三区| 国产91精品久久久久久久网曝门| 亚洲欧美日韩中文播放| 欧美一区二区三区免费在线看| 国产成人免费9x9x人网站视频| 亚洲免费毛片网站| 精品第一国产综合精品aⅴ| 99久久99久久精品免费观看| 日日夜夜免费精品| 中文字幕在线一区二区三区| 67194成人在线观看| 成人性视频网站| 青青草91视频| 一区二区免费在线播放| 久久天堂av综合合色蜜桃网| 欧美怡红院视频| eeuss鲁片一区二区三区在线看 | 一区二区三区成人| 精品日韩一区二区三区| 91久久国产最好的精华液| 国产激情视频一区二区三区欧美| 亚洲丶国产丶欧美一区二区三区| 国产日韩欧美精品一区| 91精品久久久久久蜜臀| 在线精品亚洲一区二区不卡| 国产成人高清在线| 美女一区二区视频| 亚洲成人一区二区| 亚洲欧美经典视频| 日本一区二区电影| 久久久亚洲综合| 日韩美一区二区三区| 欧美久久久影院| 欧美日精品一区视频| 色国产综合视频| 91亚洲国产成人精品一区二三| 国产麻豆精品95视频| 九九九精品视频| 裸体一区二区三区| 日本aⅴ免费视频一区二区三区| 一区二区三区精品| 一区二区三区四区五区视频在线观看| 久久精子c满五个校花| 欧美精品一区二区精品网| 欧美二区三区的天堂| 欧美区视频在线观看| 欧美色精品在线视频| 欧美特级限制片免费在线观看| 91一区二区三区在线观看| 成人一级片网址| 成人av在线看| 91免费精品国自产拍在线不卡| 成+人+亚洲+综合天堂| 懂色中文一区二区在线播放| 国产成人av电影免费在线观看| 国产综合久久久久久鬼色| 国模娜娜一区二区三区| 国产乱码一区二区三区| 国产高清成人在线| 99综合电影在线视频| 色婷婷av久久久久久久| 欧美午夜精品电影| 91麻豆精品国产91| 亚洲精品一区二区三区四区高清 | 综合在线观看色| 综合亚洲深深色噜噜狠狠网站| 亚洲精品一卡二卡| 午夜精品一区二区三区电影天堂| 视频一区二区国产| 国模大尺度一区二区三区| 国产91精品露脸国语对白| 色偷偷一区二区三区| 欧美二区乱c少妇| 国产亚洲1区2区3区| 亚洲免费在线观看| 美日韩一级片在线观看| 国产黄人亚洲片| 欧美系列亚洲系列| 久久这里只有精品首页| 国产精品白丝在线| 视频在线观看91| 国产盗摄女厕一区二区三区| 91老师片黄在线观看| 91精品国产91久久综合桃花 | 99麻豆久久久国产精品免费| 色婷婷精品久久二区二区蜜臂av| 欧美浪妇xxxx高跟鞋交| 精品盗摄一区二区三区| 亚洲免费看黄网站| 狠狠色综合色综合网络| 一本大道av一区二区在线播放| 8x8x8国产精品| 国产精品久久久久久一区二区三区| 亚洲午夜av在线| 国产成人综合精品三级| 欧美三级电影在线观看| 久久精品一区四区| 午夜久久久久久久久| 成人午夜免费电影| 欧美日韩免费观看一区三区| 国产清纯在线一区二区www| 亚洲国产va精品久久久不卡综合 | 蜜臀av亚洲一区中文字幕| 成人91在线观看| 欧美成人aa大片| 一区二区免费视频| av成人免费在线| 久久这里都是精品| 肉丝袜脚交视频一区二区| 99久久99久久精品免费看蜜桃| 日韩精品中文字幕在线一区| 一区二区三区在线免费播放| 国产福利不卡视频| 日韩视频国产视频| 亚洲高清不卡在线| 色婷婷综合中文久久一本| 欧美激情一区二区三区在线| 午夜精品一区二区三区免费视频 | 日韩精品中文字幕一区二区三区 | 国产在线一区观看| 91精品国产欧美一区二区18| 亚洲国产一区在线观看| aaa欧美大片| 国产精品水嫩水嫩| 国产一区二区三区黄视频| 精品久久久久久最新网址| 日韩精品每日更新| 欧美日韩免费一区二区三区 | 日韩免费一区二区三区在线播放| 亚洲自拍偷拍网站| 色综合久久久久综合体桃花网| 国产日产欧产精品推荐色| 国产精品一区在线观看你懂的| 日韩色视频在线观看| 毛片基地黄久久久久久天堂| 91精品国产综合久久婷婷香蕉 |