2015.05.13

【Ruby】TCPサーバーを作る

扱いは簡単でよさげですね。

TCPサーバーの使い方

TCPサーバーのサンプルとしては以下の通り。

require "socket"

port = 12345

#サーバー作成
sv = TCPServer.open( port )

#とりあえず無限ループ
while true do
	#通信接続待ち
	puts "接続待機待ち"
	sock = sv.accept
	
	#アクセス先表示
	puts "#{sock.peeraddr[3]}:#{sock.peeraddr[1]} から接続あり"
	
	begin
		#文字列を受け取る
		str = sock.gets
		puts "受け取り文字列:#{str}"
		
		#データを返す
		sock.write( str )
		
		#ソケットを閉じる
		sock.close
	rescue
		#通信エラー
		puts "通信エラー発生"
	end
	
end

#サーバー終了
sv.close

・require "socket"
TCP通信は標準で組み込まれているらしいので
soketをrequireすれば使えるようになる。

・TCPServer.open
これでサーバーを作ります。
引数は待ち受けポート番号。

・sv.accept
acceptをするとアクセス待ちになります。
誰かからのアクセスがない限りacceptから戻ってくることはない。
なので別処理をしたいときには別スレッドに分ける必要がある。

戻り値としてソケットが返ってくるので
これで相手とのやり取りをする。

通信相手の情報はsock.peeraddrに入っている。
sock.peeraddr[3]にIP、sock.peeraddr[1]に返信ポートが書かれている。

・データの受け渡し
基本的に標準入出力と同じようにやりとりをする。
詳しくはSocketのドキュメントを参照。
Link:class Socket
今回は簡単に1行読んでそれをそのまま返す形にしている。

相手がまだデータを送ってない時や
受け取る準備ができてなかった時にはそこで処理がストップする。
これがTCP通信の利点ですね。

ここをスレッド化すれば通信対象への各自処理として
分離できるという感じでしょう。

・例外処理
データ等の送信が失敗すると例外が返される。
通信切断も通信をしたときに確認ができるみたいなので
例外処理は必須でしょう。


これだけだとデータのやり取りだけになってしまう。

ちゃんと使っていくのであればクライアントのやり取り(プロトコル)
をしっかりと決めないといけないでしょう。

Pocket

ニャッキ格闘列伝 > プログラム >

前の記事:
次の記事:

コメントリスト

コメントなし

コメント



*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

こんなタグが使えるみたいよ:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>