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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? datasocket.cpp

?? 面向軟件工程的Visual C++網(wǎng)絡(luò)程序開發(fā)
?? CPP
字號:
// DataSocket.cpp : implementation file

#include "stdafx.h"
#include "Server.h"
#include "MainFrm.h"
#include "..\\Common.h"
#include "DataSocket.h"
#include "ListenSocket.h"
#include "ServerDoc.h"
#include "ServerView.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDataSocket

CDataSocket::CDataSocket(CAsyncSocket* pListenSock)
{
//	m_pMainWnd = ((CListenSocket*)pListenSock)->GetMainWnd();
	// 設(shè)定套接字選項
	LINGER linger;
	linger.l_onoff = 1;
	linger.l_linger = 5000; // 等待5秒
	SetSockOpt(SO_LINGER, (void*)&linger, sizeof(linger), SOL_SOCKET);

}

CDataSocket::~CDataSocket()
{
}


// Do not edit the following lines, which are needed by ClassWizard.
#if 0
BEGIN_MESSAGE_MAP(CDataSocket, CAsyncSocket)
	//{{AFX_MSG_MAP(CDataSocket)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
#endif	// 0

/////////////////////////////////////////////////////////////////////////////
// CDataSocket member functions

void CDataSocket::OnReceive(int nErrorCode) 
{
	if (nErrorCode != 0) {
		return;
	}
	
	// 查看數(shù)據(jù)包類型
	WORD type = 0;
	if (Receive((void*)&type, sizeof(type), 0) != sizeof(type)) {
		TRACE0("unable to receive package type info.");
		return;
	}
	
	switch (type) 
	{
	case PACKAGE_LOGIN: // login infomation
		OnReceiveLogin();
		break;
	case PACKAGE_LOGOUT:
		OnReceiveLogout();
		break;
	case PACKAGE_MESSAGE: // message send to server
		OnReceiveMessage();
		break;
	default:
		break;
	}	
}

void CDataSocket::OnReceiveLogin()
{
	LOGIN_INFO info;
	if (Receive((void*)&info, sizeof(info), 0) != sizeof(info)) {
		TRACE0("unable to receive user login infomation.");
		return;
	}
	// 你可以在這里檢測用戶名和密碼的正確性, 為簡單起見, 我們在這里跳過
	
	// 向其他用戶發(fā)送該用戶上線的消息
	SOCKADDR_IN addrIn;
	int	addrLen = sizeof(SOCKADDR_IN);

	if (!GetPeerName((SOCKADDR*)&addrIn, &addrLen)) {
		TRACE0("Unable to get peer name.\n");
		return;
	}

	USER_INFO userInfo;
	memcpy(userInfo.name, info.name, strlen(info.name) + 1);
	userInfo.port = addrIn.sin_port;
	userInfo.addr = addrIn.sin_addr.s_addr;
	
	CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
	CServerDoc* pDoc = (CServerDoc*)pFrame->GetActiveDocument();
	CServerView* pView = (CServerView*)pFrame->GetActiveView();

	// 更新顯示消息
	CString strMsg;
	strMsg.Format(IDS_LOGIN, userInfo.name, 
		inet_ntoa(*(in_addr*)&userInfo.addr),
		ntohs(userInfo.port));
	pView->AppendMessage(strMsg);	

	// 向登錄用戶發(fā)送在線人員列表
	pDoc->SendUserListTo(userInfo, this);
	// 向所有用戶發(fā)送該用戶上線的消息
	pDoc->AlterUser(PACKAGE_USERADD, &userInfo, this);	
}

void CDataSocket::OnReceiveLogout()
{
	// 獲取登出用戶的信息
	USER_INFO info;

	if (Receive((void*)&info, sizeof(info), 0) != sizeof(info)) {
		TRACE0("unable to receive user logout infomation.\n");
		return;
	}
/*
	SOCKADDR_IN addrIn;
	int	addrLen = sizeof(SOCKADDR_IN);
	
	if (!GetPeerName((SOCKADDR*)&addrIn, &addrLen)) {
		TRACE0("Unable to get peer name.\n");
		return;
	}
*/	
	CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
	CServerDoc* pDoc = (CServerDoc*)pFrame->GetActiveDocument();
	CServerView* pView = (CServerView*)pFrame->GetActiveView();
/*
	USER_INFO* pUserInfo = pDoc->LookupInfo(addrIn.sin_addr.s_addr, addrIn.sin_port);
	if (pUserInfo == NULL) {
		return;
	}
*/
	// 發(fā)送確認用戶退出的數(shù)據(jù)報
	const WORD type = PACKAGE_LOGOUT;
	if (Send((void*)&type, sizeof(type), 0) != sizeof(type)) {
		TRACE0("failed to send confirm message to the quitting user.\n");
		return;
	}
	// 關(guān)閉該套接字
	pDoc->GetListenSocket()->CloseDataSocket(this);
	
	// 向其他在線用戶發(fā)消息, 告知有一用戶離開
	pDoc->AlterUser(PACKAGE_USERDEL, &info, this);
	
	// 將該DataSocket加到死了的Socket鏈表
	// pDoc->AddDeadSock(this);
	
	// 更新顯示
	CString strMsg;
	strMsg.Format(IDS_LOGOUT, info.name, 
		inet_ntoa(*(in_addr*)&info.addr),
		ntohs(info.port));
	pView->AppendMessage(strMsg);		
}

void CDataSocket::OnReceiveMessage()
{
	char* pBuf = new char[0x1000];
	ASSERT(pBuf != NULL);
	
	if (Receive((void*)pBuf, 0x1000, 0) <= 0) {
		TRACE0("failed to receive client message.");
		return;
	}
	
	// 顯示消息
	SOCKADDR_IN addrIn;
	int	addrLen = sizeof(SOCKADDR_IN);
	
	if (!GetPeerName((SOCKADDR*)&addrIn, &addrLen)) {
		TRACE0("Unable to get peer name.\n");
		return;
	}

	CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
	CServerDoc* pDoc = (CServerDoc*)pFrame->GetActiveDocument();
	CServerView* pView = (CServerView*)pFrame->GetActiveView();
	
	USER_INFO* pInfo = pDoc->LookupInfo(addrIn.sin_addr.s_addr, addrIn.sin_port);
	CString strMsg;
	strMsg.Format(IDS_MESSAGE, pInfo->name, 
		pBuf, inet_ntoa(*(in_addr*)&pInfo->addr));
	pView->AppendMessage(strMsg);
}

void CDataSocket::OnClose(int nErrorCode) 
{	
	//	CAsyncSocket::OnClose(nErrorCode);
	Close();	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久不卡网国产精品二区| 粉嫩av亚洲一区二区图片| 国产亚洲午夜高清国产拍精品 | 欧美精选午夜久久久乱码6080| 国产乱淫av一区二区三区| 久久精品国产亚洲5555| 丝袜美腿成人在线| 亚洲精品少妇30p| 亚洲欧洲中文日韩久久av乱码| 亚洲人妖av一区二区| 日本一区二区高清| 国产精品福利在线播放| 最新国产精品久久精品| 一区二区三区视频在线看| 亚洲一区二区三区中文字幕| 亚洲狠狠丁香婷婷综合久久久| 一区二区三区四区高清精品免费观看| 亚洲伦在线观看| 亚洲1区2区3区4区| 奇米色777欧美一区二区| 日韩电影一区二区三区四区| 日韩在线一二三区| 六月丁香综合在线视频| 国产91对白在线观看九色| 一本一道波多野结衣一区二区| 欧美私模裸体表演在线观看| 国产亚洲精品aa午夜观看| 欧美国产丝袜视频| 亚洲国产视频一区| 精品制服美女丁香| 成人激情免费网站| 欧美亚洲一区二区在线观看| 3atv在线一区二区三区| 久久久久久久久久电影| 一级中文字幕一区二区| 人人超碰91尤物精品国产| 国模少妇一区二区三区| 国产成人免费视频一区| 不卡av在线网| 日韩网站在线看片你懂的| 欧美国产精品专区| 亚洲精品大片www| 男男成人高潮片免费网站| 国产一区二区在线观看免费| 日本乱码高清不卡字幕| 欧美成人aa大片| 日韩美女视频一区| 国模大尺度一区二区三区| 在线视频国产一区| 日本一区二区在线不卡| 日韩高清在线电影| 色综合av在线| 国产日韩综合av| 偷拍一区二区三区| 99re成人精品视频| 国产日韩欧美不卡在线| 午夜一区二区三区在线观看| 丁香婷婷综合色啪| 91精品国产综合久久精品性色 | 一本久道中文字幕精品亚洲嫩| 日韩欧美的一区二区| 一个色综合网站| 成人精品国产福利| 久久久99精品免费观看不卡| 午夜激情综合网| 色久优优欧美色久优优| 国产精品电影院| 成人国产亚洲欧美成人综合网| 精品久久五月天| 日日噜噜夜夜狠狠视频欧美人| 91免费看`日韩一区二区| 日本一区二区三区四区| 国产一区二区在线观看视频| 欧美精品一区二区三区高清aⅴ | 精品久久久久久久久久久久久久久| 亚洲永久免费视频| 色婷婷亚洲一区二区三区| 国产精品欧美久久久久一区二区| 国产精一品亚洲二区在线视频| 日韩精品资源二区在线| 老司机午夜精品| 欧美精品一区二区三区在线 | 欧美日韩一区二区欧美激情| 亚洲欧洲精品天堂一级| 成人av在线网站| 亚洲人精品一区| 欧美午夜一区二区三区| 亚洲亚洲精品在线观看| 欧美日韩国产美| 日韩电影在线一区二区三区| 日韩三区在线观看| 久久精品国产一区二区| 久久精品日韩一区二区三区| av高清不卡在线| 亚洲成人动漫av| 日韩一级免费一区| 国产白丝精品91爽爽久久| 国产精品久久777777| 欧美午夜在线一二页| 久久er99热精品一区二区| 国产欧美综合在线| 日本乱人伦aⅴ精品| 日本午夜精品视频在线观看| 欧美精品一区二区三| 成人sese在线| 日本美女一区二区三区| 久久嫩草精品久久久精品| 不卡视频在线看| 免费一级欧美片在线观看| 中文字幕不卡在线| 欧美卡1卡2卡| 成人高清视频免费观看| 午夜天堂影视香蕉久久| 国产欧美精品一区二区三区四区| 在线精品国精品国产尤物884a| 国内精品伊人久久久久av一坑| 中文天堂在线一区| 在线观看免费亚洲| 国产一区二区三区免费观看| 一区二区三区四区高清精品免费观看| 日韩欧美国产三级电影视频| 色悠悠久久综合| 国产成人在线视频网站| 亚洲国产精品天堂| 国产精品麻豆网站| 日韩美一区二区三区| 一本色道综合亚洲| 成人综合激情网| 精品一区二区三区蜜桃| 香蕉成人伊视频在线观看| 国产三级欧美三级日产三级99| 欧美日韩成人高清| jlzzjlzz亚洲女人18| 青青草成人在线观看| 久久久亚洲欧洲日产国码αv| 欧美日韩精品一二三区| 成人手机在线视频| 精品一区二区三区在线播放| 国产精品三级av| 国产无人区一区二区三区| 日韩精品在线一区二区| 91精品国产入口| 欧美日韩国产系列| 欧美日韩一区二区欧美激情| 在线日韩一区二区| 91在线观看地址| 丁香激情综合国产| 国产一区二区电影| 久久66热偷产精品| 免费黄网站欧美| 美女一区二区三区在线观看| 日韩制服丝袜先锋影音| 亚欧色一区w666天堂| 亚洲福利电影网| 亚洲www啪成人一区二区麻豆| 亚洲精品久久久蜜桃| 最新国产の精品合集bt伙计| 日韩一区在线播放| 成人免费视频在线观看| 亚洲日本一区二区| 亚洲免费观看高清完整版在线观看| 国产精品不卡在线| 成人免费在线播放视频| 一区二区在线观看视频在线观看| 亚洲精品国产一区二区精华液 | 亚洲一区精品在线| 亚洲最新视频在线播放| 一级女性全黄久久生活片免费| 亚洲国产精品影院| 捆绑调教一区二区三区| 精品一区二区在线免费观看| 国产精品一区二区免费不卡 | 国产一区二区电影| 岛国一区二区在线观看| 91一区二区在线观看| 欧美日韩免费一区二区三区 | 中文字幕精品一区二区三区精品| 国产精品私房写真福利视频| 亚洲最新视频在线观看| 美国十次了思思久久精品导航| 国产乱码精品一区二区三区av| 成人18视频日本| 91.成人天堂一区| 久久精品视频网| 一区二区三区在线观看视频| 亚洲一区二区3| 激情五月激情综合网| 99re免费视频精品全部| 欧美高清dvd| 国产精品人妖ts系列视频| 亚洲一区在线观看网站| 99久久精品一区二区| 欧美三级中文字| 国产性色一区二区| 亚洲综合色噜噜狠狠| 国产一区二区精品久久| 欧美色视频一区| 中文字幕亚洲综合久久菠萝蜜| 香蕉加勒比综合久久| 波多野结衣一区二区三区|