テキストチャットサーバー
説明
チャットルームのサーバープログラムです。クライアントから送られてきたテキストを、そのチャットルームに接続しているクライアント全部に送ることで、チャットルームの機能を実現しています。
Studioで試す
以下のリンクから Jasmine Tea でこのサンプルプログラムを Studio 画面で開いて実際に試すことができます。
プログラム
port=8080
server_conn_id$=bind$(port)
if len(server_conn_id$)=0 then
print "接続受け付けの開始に失敗しました"
end
end if
clients@=[]
do
packet@=receive@(server_conn_id$)
if 0<len(packet@) then
client_conn_id$=packet@[0]
message@=packet@[1]
if message@[0] = 1 then
request@=[message@[1] + "さんが入室しました"]
print request@[0]
result=broadcast(port, request@)
clients@[len(clients@)] = [client_conn_id$, message@[1]]
else if message@[0] = 2 then
request@=[message@[1] + ": " + message@[2]]
print request@[0]
result=broadcast(port, request@)
end if
end if
if 0<>len(clients@) then
clients@=update_clients@(port, clients@)
end if
loop
function update_clients@(port, clients@)
ret@=[]
actual_clients@=connected@(port)
for i=0 to len(clients@)-1
client@=clients@[i]
gone=-1
for j=0 to len(actual_clients@)-1
if actual_clients@[j]=client@[0] then
gone=0
end if
next
if gone then
message$ = clients@[i][1] + "さんが退出しました"
print message$
result=broadcast(port, [message$])
else
ret@[len(ret@)]=clients@[i]
end if
next
return ret@
end function
function broadcast(port, message@)
clients@=connected@(port)
for i=0 to len(clients@)-1
result=send(clients@[i], message@)
if not result then
print "送信エラー"
end if
next
return -1
end function
解説
このプログラムは、ネットワーク経由でメッセージを送受信するチャットサーバーを実装しています。最初にサーバーは指定されたポート番号(8080)で起動し、そのポートにバインドします。バインドが成功したかどうかを確認し、失敗した場合にはエラーメッセージを表示してプログラムを終了します。
プログラムはクライアントからの接続を待ち受け、受信したメッセージに基づいて異なるアクションを行います。クライアントからのメッセージは2種類あり、1つは新しいクライアントがチャットに参加することを示す入室メッセージ、もう1つは通常のチャットメッセージです。入室メッセージを受信すると、サーバーは「○○さんが入室しました」というメッセージを全クライアントにブロードキャストし、新しいクライアントをクライアントリストに追加します。通常のチャットメッセージを受信すると、そのメッセージを全クライアントにブロードキャストします。
サーバーは定期的に接続中のクライアントリストを更新し、接続が切れたクライアントがいるかをチェックします。接続が切れたクライアントが確認されると、「○○さんが退出しました」というメッセージを残りのクライアントにブロードキャストし、そのクライアントをリストから削除します。
このプログラムには update_clients@ と broadcast の2つの関数が含まれています。update_clients@ 関数は、接続中のクライアントと保存されたクライアントリストを比較し、退出したクライアントを特定して処理します。broadcast 関数は、指定されたメッセージを接続中の全クライアントに送信し、送信に失敗した場合にエラーメッセージを表示します。
全体として、このプログラムはクライアントの接続、メッセージの受信と送信、クライアント状態の管理を行い、簡易チャットサービスの機能を提供しています。