マルチスレッドのサーバー作り
Posted: 2010年8月13日(金) 21:41
[1] 質問文
[1.1] 自分が今マルチプロセッサのサーバー作りたいです。
[1.2] 取り組んだプログラムコードが下にあります。
[1.3] 複数クライアント対応作るつもりですが複数対応なってないです。
[1.4] どうすれば複数クライアントが扱えるサーバーがどのように作ればいいでしょうか?
[2] 環境
[2.1] OS : Windows
[2.2] コンパイラ名 : VC++ 2008
[3] その他
・C言語を一年半ぐらい勉強しました。初級か中級ぐらいです。
・ライブラリを使っていません。
ご教授の程、よろしくお願いします。
[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();
}ご教授の程、よろしくお願いします。
