[1.1] 自分が今マルチプロセッサのサーバー作りたいです。
[1.2] 取り組んだプログラムコードが下にあります。
[1.3] 複数クライアント対応作るつもりですが複数対応なってないです。
[1.4] どうすれば複数クライアントが扱えるサーバーがどのように作ればいいでしょうか?
[2] 環境
[2.1] OS : Windows
[2.2] コンパイラ名 : VC++ 2008
[3] その他
・C言語を一年半ぐらい勉強しました。初級か中級ぐらいです。
・ライブラリを使っていません。
#include <process.h> #include <winsock2.h> #pragma comment(lib,"WSOCK32") #pragma warning(disable:4312) class C_server{ int dstSocket; static void CallFunc( LPVOID pParam ); public: C_server(int dstSocket); void MainFunc(); }; C_server::C_server(int dstSocket):dstSocket(dstSocket){_beginthread(CallFunc,0,this);} void C_server::CallFunc(LPVOID pParam){((C_server*)pParam)->MainFunc();} void C_server::MainFunc(){ char buffer[1024]; while(dstSocket){ //パケットの受信 int numrcv = recv(dstSocket, buffer, sizeof(char)*1024, 0); if(numrcv ==0 || numrcv ==-1){ closesocket(dstSocket); break; } printf("変換前 %s",buffer); for (int i=0; i< numrcv; i++){ // bufの中の小文字を大文字に変換 buffer = toupper(buffer); } // パケットの送信 send(dstSocket, buffer, sizeof(char)*1024, 0); printf("→ 変換後 %s \n",buffer); } } void main() { // ポート番号,ソケット int srcSocket; // 自分 int dstSocket; // 相手 // sockaddr_in 構造体 struct sockaddr_in srcAddr; // Windows の場合 WSADATA data; WSAStartup(MAKEWORD(2,0), &data); // sockaddr_in 構造体のセット memset(&srcAddr, 0, sizeof(srcAddr)); srcAddr.sin_port = htons(40453); srcAddr.sin_family = AF_INET; srcAddr.sin_addr.s_addr = htonl(INADDR_ANY); // ソケットの生成(ストリーム型) srcSocket = socket(AF_INET, SOCK_STREAM, 0); // ソケットのバインド bind(srcSocket, (struct sockaddr *) &srcAddr, sizeof(srcAddr)); // 接続の許可 listen(srcSocket, 10); while(1){ if((dstSocket = accept(srcSocket, NULL, 0))>0){ //static C_server s(dstSocket); // new C_server(dstSocket); // //C_server s(dstSocket); // } } WSACleanup(); }
ご教授の程、よろしくお願いします。
