複数のクライアントを Socket Server に受け入れるのに本当に問題があります。現在、1 つのクライアントが許可されています。次のクライアントが参加しようとすると、アプリはフリーズして何もしません。
私はこれについて先週たくさんの調査をしましたが、私を満足させるものは何もないようです. マルチスレッドに関するチュートリアルを見たことがありますが、実際に機能するための十分な情報が提供されていませんでした (はい、私は非常に視覚的な学習者であり、プログラミングには最適ではありません)。
そのため、これを行う方法についてまともな説明を得ることができるかどうか疑問に思っていました. 可能であれば、そこに例を入れることもできます。
この関数も見ましたがselect()
、十分な情報が提供されていませんでした。
私は稼働中のサーバーを持っていますが、マルチスレッディングが頭を悩ませ始めています。状況とその仕組みについて非常に混乱しています。
ですから、説明と例があれば、それは素晴らしいことです!
これは現在のサーバー コードですが、複数のクライアントを有効にするにはどうすればよいですか?
#include <iostream>
#include <winsock2.h>
#include <vector>
bool gamerunning = true;
bool srvr_connect = false;
int srvr_rec = 0;
int main() {
WSAData wsa;
WORD Version = MAKEWORD(2, 1);
WSAStartup(Version, &wsa);
SOCKET Listen;
SOCKET Connect;
Listen = socket(AF_INET, SOCK_STREAM, 0);
Connect = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN Server;
Server.sin_addr.s_addr = inet_addr("192.168.2.4");
Server.sin_family = AF_INET;
Server.sin_port = htons(100);
bind(Listen, (SOCKADDR*)&Server, sizeof(Server));
listen(Listen, 4);
int size = sizeof(Server);
std::cout << "Your server has been started!\nConnecting...\n";
Connect = accept(Listen, (SOCKADDR*)&Server, &size);
while (gamerunning) {
if (Connect != NULL) {
srvr_connect = true;
std::cout << "Welcome to player: " << srvr_rec << "\n";
srvr_rec +=1;
}
if (srvr_connect == true) {
if (test_frame == 0) {
std::cout << "Connection Sent!\nConnection Has Been Breached!\nPlayers Are Now Able to Join Your Server!\n";
test_frame +=1;
}
}
}
std::cin.get();
return 0;
}
ご覧のとおり、これは私のクライアントにとって非常にうまく機能します。ただし、受け入れるのは1つだけです。これを機能させるにはどうすればよいですか?