⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serverthread.cpp

📁 MPICH是MPI的重要研究,提供了一系列的接口函数,为并行计算的实现提供了编程环境.
💻 CPP
字号:
#include "stdafx.h"#include "ServerThread.h"#include "ClientThread.h"#include "sockets.h"HANDLE g_hStopSocketLoopEvent;void SocketServerThread(int port){	WSADATA wsaData;	SOCKET sock;	WSAEVENT sock_event, aEvents[2];	int error;	// Start up the Winsock2 dll	if (WSAStartup( MAKEWORD( 2, 0 ), &wsaData ))		return;	error = Simple_create_bind_socket(&sock, &sock_event, port);	if (error)	{		printf("Unable to create a socket on port %d. Error %d\n", port, error);		return;	}	// associate sock_event with sock	WSAEventSelect(sock, sock_event, FD_ACCEPT);	if (listen(sock, SOMAXCONN) == SOCKET_ERROR)	{		error = WSAGetLastError();		printf("listen failed. Error: %d\n", error);		Simple_closesocket(sock, sock_event);		return;	}	DWORD result;	aEvents[0] = sock_event;	aEvents[1] = g_hStopSocketLoopEvent = CreateEvent(NULL, TRUE, FALSE, NULL);	// Loop indefinitely, waiting for remote connections or a stop signal	while (true)	{		SOCKET temp_socket;		WSAEVENT temp_event;		result = WSAWaitForMultipleEvents(2, aEvents, FALSE, INFINITE, FALSE);		if ((result != WSA_WAIT_EVENT_0) && (result != WSA_WAIT_EVENT_0+1))		{			printf("Wait for a connect event failed. Error: %d", result);			Simple_closesocket(sock, sock_event);			return;		}				if (result == WSA_WAIT_EVENT_0+1)		{			Simple_closesocket(sock, sock_event);			CloseHandle(g_hStopSocketLoopEvent);			return;		}		temp_socket = accept(sock, NULL, NULL);		if (temp_socket != INVALID_SOCKET)		{			SocketClientThreadArg *cArg = new SocketClientThreadArg;			HANDLE hThread;			temp_event = WSACreateEvent();			if (WSAEventSelect(temp_socket, temp_event, FD_READ | FD_CLOSE) == SOCKET_ERROR)			{				printf("WSAEventSelect failed. Error: %d\n", WSAGetLastError());				Simple_closesocket(sock, sock_event);				CloseHandle(g_hStopSocketLoopEvent);				return;			}			cArg->sock = temp_socket;			cArg->sock_event = temp_event;			DWORD dwThreadID;			hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)SocketClientThread, cArg, 0, &dwThreadID);			if (hThread == NULL)			{				delete cArg;				Simple_closesocket(temp_socket, temp_event);				printf("CreateThread failed in SocketServerThread. Error: %d", GetLastError());				Simple_closesocket(sock, sock_event);				CloseHandle(g_hStopSocketLoopEvent);				return;			}			CloseHandle(hThread);			continue;		}		result = GetLastError();		if (result == WSAEWOULDBLOCK)		{			WSAResetEvent(sock_event);			WSAEventSelect(sock, sock_event, FD_ACCEPT);		}		else		{			printf("SocketServerThread: accept failed. Error: %d\n", result);			Simple_closesocket(sock, sock_event);			CloseHandle(g_hStopSocketLoopEvent);			return;		}	}	WSACleanup();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -