ソケットプログラム(TCP,UDP) EasyChat開発

ソケットプログラム(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の長所短所をよく理解してサー
バー構築に生かしたい。
受信スレッドの無限ループが重いのでどうに
かしたい。