- 1 名前:-Я- [2005/09/24(土) 16:41:08 ID:SuwAeEoS]
- ネットワークRPGを作れるようなソフトってありますか?
- 18 名前:TCPサーバ基本1/3 mailto:sage [2005/09/29(木) 22:35:37 ID: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 ;//返値
- 19 名前:WindowsのTCPサーバ基本2/4 mailto:sage [2005/09/29(木) 22:36:55 ID: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()");
- 20 名前:WindowsのTCPサーバ基本2/4 mailto:sage [2005/09/29(木) 22:37:56 ID: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; }
- 21 名前:WindowsのTCPサーバ基本4/4 mailto:sage [2005/09/29(木) 22:38:30 ID: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); }
|

|