Python socketでチャット作ってみました
##●はじめに
久しぶりにサイバーセキュリティプログラミングの本を読みました。
TCPサーバとTCPクライアントを作ってたら「もしかしたらチャット作れるんじゃない?」っていう感じで作ってみました。
チャットと言っておきながらサーバ-クライアント間なので、なんちゃってチャットになってます。
今回はサーバをConohaのVPS(Centos7),クライアントをwindows上で動かしてます。
##1,TCP_SERVER
TCP_SERVER
import socket
host_ip = socket.gethostbyname(socket.gethostname()) #ホストのIPを取る
port = 1890
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #ソケット作成
server.bind((host_ip, port)) #IPとポート結び付け
server.listen(1) #接続数
print ("[*]Server waiting on %s : %s" % (host_ip, port))
client, addr = server.accept()
print ("[Connection from %s:%s ]" % (addr[0], addr[1]))
def input_encode(): #送るメッセージ入力
data = input("[Server] > ")
if data == "exit": #終了条件
client.send(b'exit')
print ("////Finish Connect////")
server.shutdown(1)
server.close()
exit()
else:
data = data.encode('utf-8') #エンコード
return data
def decode(response): #デコード
response = response.decode()
if response == "exit": #終了条件
print ("////Finish Connect////")
client.close()
exit()
return response
while True:
response_data = client.recv(1024) #データ受け取り
response_data = decode(response_data)
print ("[Client] > %s " % (response_data))
client.send(input_encode()) #メッセージ送信
#
##2,TCP_CLIENT
TCP_CLIENT
import socket
target_host = "サーバIP"
target_port = 1890
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #ソケット作成
client.connect((target_host, target_port)) #サーバのIPとポートで接続
print ("Connect Success!! %s : %s" % (target_host, target_port))
def input_encode(): #エンコード
data = input("[Client] > ")
if data == "exit": #終了条件
client.send(b'exit')
print ("////Finish Connect////")
client.shutdown(1)
client.close()
exit()
data = data.encode('utf-8')
return data
def decode(response): #デコード
response = response.decode()
if response == "exit": #終了条件
print ("////Finish Connect////")
client.close()
exit()
return response
while True:
client.send(input_encode())
response = client.recv(4096) #データ受け取り
response = decode(response) #受け取りデータをデコード
print ("[Server] > %s " % (response))
#
##まとめ
チャットもどき完成した! けど、まだまだ改善する点がありそう。
一番詰んだ点は、サーバ側のpythonが2.7でinputがうまくいかなくてずっと悩んでました
結局Python3.5入れて動かしました。
次はクライアント間でチャットできるのを作ります。