【发布时间】:2013-08-29 23:25:37
【问题描述】:
我有一个 WinSock 服务器,我想知道如何使它成为多线程的。我以前使用过线程,我了解它们的作用。但我不确定如何将它们与我的服务器代码一起使用。所以这里是:
main.cpp
/* This is our Server */
//Includes
#include "Functions.h"
//Main function
int main(){
DLLVERSION = MAKEWORD(2,1);
answer = WSAStartup(DLLVERSION, &wsaData);
sConnect = socket(AF_INET, SOCK_STREAM, NULL);
addr.sin_addr.s_addr = inet_addr(HostIP);
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);
sListen = socket(AF_INET, SOCK_STREAM, NULL);
bind(sListen, (SOCKADDR*)&addr, sizeof(addr));
listen(sListen, SOMAXCONN);
//Listening for clients
for(;;){
Print("Waiting for incoming connections");
//If a connection is found
if(sConnect = accept(sListen, (SOCKADDR*)&addr, &addrlen)){
Print("Connection found!");
Send("Hello!");
}
}
}
如何让这个服务器成为多线程的?
我尝试使用CreateThread();,但是一旦创建了另一个线程,最后一个线程就会由于某种原因结束。有人可以帮忙吗?
【问题讨论】:
-
不需要编写一个用线程处理多个请求的服务器。你可以使用
select()。这是一个要求吗? -
@Sebastian 我正在编写游戏服务器,是否有必要使用游戏服务器编写代码?
-
理论上没有必要,但实际上可以。顺便说一句,每个请求都有一个线程可能也不是一个好主意。查看线程池。
-
@MSalters 你建议我为游戏服务器做什么?因为它会同时有多个玩家在线,我不需要像每毫秒一样接受连接吗?
-
@user2635579:不是真的。典型的游戏加载需要数千毫秒。只需提前发送连接请求,即使接受半秒钟,您的用户也不会注意到。
标签: c++ windows multithreading client-server server-side