我对网络编程有点陌生,我正在尝试制作一个可以处理多个客户端的套接字服务器。服务器将成为玩家和游戏引擎之间的连接,用于基于文本的冒险,用 c++ 编写。
我让代码为单个客户端工作,以及在客户端和服务器之间发送数据。实施的下一步是使其能够处理多个客户端。因为我理解 fork 是这样做的。到目前为止,我已经得到了这段代码,但我一生都无法让它发挥作用。
while (1) {
cout << "Server waiting." << endl;
n = sizeof(struct sockaddr_in);
if ((clientSocket = accept(servSocket, (struct sockaddr*) (&client), (socklen_t*) (&n))) < 0) {
cerr << "Error: " << errno << ": " << strerror(errno) << endl;
}
if(fork() == 0){
cout << "Child process created. Handling connection with << " << inet_ntop(AF_INET, &client.sin_addr, buff, sizeof(buff)) << endl;
close(servSocket);
}
string sendmsg;
string recvmsg;
int bytesRecieved = 0;
char package[1024];
string playerMessage;
while(1){
bytesRecieved = recv(clientSocket, package, 1024, 0);
for (int offset = 0; offset < bytesRecieved/sizeof(char); ++offset) {
playerMessage += package[offset];
}
cout << playerMessage;
cin >> sendmsg;
sendmsg += "\n";
send(clientSocket, sendmsg.c_str(), sendmsg.size(), 0);
}
}
close(clientSocket);
close(servSocket);
return 0;
我知道 bind() 和之前的所有事情都应该发生在带有 fork() 的主循环之前,所以我没有费心去包括它。
预先感谢!