Download presentation
Presentation is loading. Please wait.
1
ソケットプログラム(TCP,UDP) EasyChat開発
2
ソケットプログラム ネットワークプログラミングの基礎にあたる バークレーソケットが原型 使用するのはWinSock(WS2_32.dll)。
3
2種類の接続方式 TCP/IPプロトコルには、接続型(コネクション型)と非接続型(コネクションレス型)という2種類のネットワーク通信があります。 接続型にはTCP(ストリームソケット),非接続型にはUDP(データグラムソケット)を用いる。
4
接続型(TCP) 持続的に接続されている。 高い信頼性をもった通信が可能 データ通信の順序どおりに通信可能 未完成のパケットを通信する
通信速度は遅め
5
非接続型(UDP) 継続的に接続せず、必要があるときだけ接続する。 信頼性が無い。 完成されたパケットを送る 通信順序はバラバラ
通信速度は高速
6
EasyChat 接続型はTCPを使う。 1:1の通信のみ サーバー、クライアント両方の機能を持ち合わせたものにする
暗号化や効率化は考えず、あくまでも一番単純な形で実装する。
7
ソケットの使用 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)); ソケット初期化 接続 ソケットオプション設定
8
TCP接続(サーバー) WS2_32.dllの呼び出し ソケット初期化 BIND(ソケットとポート連結) LISTEN
//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); WS2_32.dllの呼び出し ソケット初期化 BIND(ソケットとポート連結) LISTEN ACCEPT(接続待機)
9
EasyChat wait client でサーバーモードに。 最初に接続先(IP)を入力することでクライアント接続。
10
EasyChatのアルゴリズム ネットワークの初期化 (ソケット生成,bind) 接続待機 送信 Main関数ループ (ゲームループ)
受信スレッド (Worker Thread)
11
EasyChatを改良してUDPのchatプログラムも作りたい。
TCP、UDPの長所短所をよく理解してサーバー構築に生かしたい。 受信スレッドの無限ループが重いのでどうにかしたい。
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.