6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python socketでちょっとしたチャット作ってみた

Last updated at Posted at 2018-06-26

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入れて動かしました。

次はクライアント間でチャットできるのを作ります。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?