トップページgamedev
72コメント24KB

MMORPG

■ このスレッドは過去ログ倉庫に格納されています
0001-Я-2005/09/24(土) 16:41:08ID:SuwAeEoS
ネットワークRPGを作れるようなソフトってありますか?
0018TCPサーバ基本1/32005/09/29(木) 22:35:37ID:LE7U2HkX
#pragma comment(lib, "wsock32.lib")//Winsock Library のリンクオプション追加
#include <windows.h>
#include <winsock.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PORT_NO 2500//ポート番号
#define MSG_SIZE 512//受信バッファサイズ
void ErrorProccess(SOCKET, char *);//エラー処理関数
int main(int argc, char * argv[]){
 WORD wVerReq ;//WinSock要求Ver.
 WSADATA wsadata ;//WinSockライブラリ情報
 SOCKET s,sc ;//接続待ち受けソケット、通信用ソケット
 struct sockaddr_in addr,addrc ;//サーバーアドレス構造体、クライアントアドレス構造体
 char hello[] = "Hello!\n\"bye\"で終終了\n" ;//最初に送信する文字列
 char msg[MSG_SIZE + 1];//文字列送受信バッファ
 int ret ;//返値
0019WindowsのTCPサーバ基本2/42005/09/29(木) 22:36:55ID:LE7U2HkX
 wVerReq = MAKEWORD(1,1);//WinSockライブラリの要求Ver.1.1
 if(WSAStartup(wVerReq, &wsadata) != 0){printf("ライブラリ初期化失敗\n");return 1;}
 s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
 if(s == INVALID_SOCKET) ErrorProccess(0, "socket()");
 memset(&addr, 0, sizeof(addr));
 addr.sin_family = AF_INET ;
 addr.sin_addr.s_addr = htonl(INADDR_ANY); // 全てのインターフェイスを許可
 addr.sin_port = htons(PORT_NO);
 ret = bind(s, (struct sockaddr *)&addr, sizeof(addr));
 if(ret == SOCKET_ERROR) ErrorProccess(s, "bind()");
 ret = listen(s, SOMAXCONN);
 if(ret == SOCKET_ERROR) ErrorProccess(s, "listen()");
 ret = sizeof(addrc);
 sc = accept(s, (struct sockaddr *) & addrc, &ret);
 if(sc == INVALID_SOCKET) ErrorProccess(s, "accept()");
 closesocket(s);
 printf("Cliant Address : %s\n", inet_ntoa(addrc.sin_addr));
 printf("Cliant Port : %hu\n\n", ntohs(addrc.sin_port));
 ret = send(sc, hello, (int)strlen(hello), 0);
 if(ret == SOCKET_ERROR) ErrorProccess(sc, "send()");
0020WindowsのTCPサーバ基本2/42005/09/29(木) 22:37:56ID:LE7U2HkX
 do{
  ret = recv(sc, msg, MSG_SIZE, 0);
  if(ret == SOCKET_ERROR) ErrorProccess(sc, "recv()");
  msg[ret] = '\0';
  printf("受信 : %s\n", msg);
  ret = send(sc, msg, (int)strlen(msg), 0);
  if(ret == SOCKET_ERROR) ErrorProccess(sc, "send()");
  printf("送信 : %s\n", msg);
 }while(strcmp(msg, "bye"));
 closesocket(sc);
 WSACleanup();//ソケットライブラリの終了処理
 return 0;
}
0021WindowsのTCPサーバ基本4/42005/09/29(木) 22:38:30ID:LE7U2HkX
//エラー処理関数
void ErrorProccess(SOCKET s, char * api_name){
 printf("Error Area = %s , Error Code = %d\n",api_name, WSAGetLastError());
 if(s != 0){closesocket(sock);s = 0;}
 WSACleanup(); //ソケットライブラリの終了処理
 exit(1);
}
■ このスレッドは過去ログ倉庫に格納されています