ソケットプログラム(TCP,UDP) EasyChat開発 04a1016 大嶽優 ソケットプログラム ネットワークプログラミングの基礎にあたる バークレーソケットが原型 使用するのはWinSock(WS2_32.dll)。 2種類の接続方式 TCP/IPプロトコルには、接続型(コネクション 型)と非接続型(コネクションレス型)という2種 類のネットワーク通信があります。 接続型にはTCP(ストリームソケット),非接続 型にはUDP(データグラムソケット)を用いる。 接続型(TCP) 持続的に接続されている。 高い信頼性をもった通信が可能 データ通信の順序どおりに通信可能 未完成のパケットを通信する 通信速度は遅め 非接続型(UDP) 継続的に接続せず、必要があるときだけ接続 する。 信頼性が無い。 完成されたパケットを送る 通信順序はバラバラ 通信速度は高速 EasyChat 接続型はTCPを使う。 1:1の通信のみ サーバー、クライアント両方の機能を持ち合 わせたものにする 暗号化や効率化は考えず、あくまでも一番単 純な形で実装する。 ソケットの使用 WS2_32.dllの呼び出し ソケット初期化 接続 ソケットオプション設定 //WS2_32.dll if(WSAStartup(MAKEWORD(2,2),&wsadate)==SOCKET_ERROR){ return 1; } //socket my_socket=socket(AF_INET,SOCK_STREAM,0); if(my_socket==INVALID_SOCKET){ return 2; } //connect re= connect(my_socket,(SOCKADDR*)&address,sizeof(SOCKADDR_IN)); if(re){ return 3; } //option optval=SO_SEC_SSL; setsockopt(my_socket,SOL_SOCKET,SO_SECURE,(char*)&optval,sizeof(optval)); TCP接続(サーバー) WS2_32.dllの呼び出し ソケット初期化 BIND(ソケットとポート連結) LISTEN ACCEPT(接続待機) //WS2_32.dll if(WSAStartup(MAKEWORD(2,2),&wsadate)==SOCKET_ERROR){ return 1; } //socket address_in.sin_addr.s_addr=inet_addr(ip); mt_socket=socket(AF_INET,SOCK_STREAM,0); if(my_socket==INVALID_SOCKET){ return 2; } //bind if(bind(socket(struct aockaddr *)&address_in,sizeof(address_in)) ==SOCKET_ERROR) { return 3; } //listen if(listen(socket,SOMAXCONN)==SOCKET_ERROR){ return 4; } client_socket=INVALID_SOCKET; client_socket=accept(socket,(struct sockaddr*)&cs,&addresssize); EasyChat wait client でサーバーモードに。 最初に接続先(IP)を入力することでクライアント接続。 EasyChatのアルゴリズム ネットワークの初期化 (ソケット生成,bind) 接続待機 送信 Main関数ループ (ゲームループ) 受信スレッド (Worker Thread) EasyChatを改良してUDPのchatプログラム も作りたい。 TCP、UDPの長所短所をよく理解してサー バー構築に生かしたい。 受信スレッドの無限ループが重いのでどうに かしたい。
© Copyright 2024 ExpyDoc