質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.70%

PythonでCUIのチャットを実行する

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 298
退会済みユーザー

退会済みユーザー

前提・実現したいこと

よろしくお願いします。
ソケット(socket)通信に興味が出たためpythonでソケット通信の内容が行えるプログラムを探したところPythonで、CUIのチャットもどきを作ってみるという見出しのサイトを見つけたので早速コピペして実行しようとしたところエラーが起きました。
エラーが起きているのは最初のサーバーを立ち上げる段階です。
現状エラーコードを調べても何がどのようにおかしいさっぱりわからない状況です。
訂正されサーバーが立ち上がるプログラムを教えて欲しいです。
文章が読みにくかったら申し訳ありません。

発生している問題・エラーメッセージ

Traceback (most recent call last):
  File "socket_server.py", line 52, in <module>
    ss.socket_server_up()
  File "socket_server.py", line 13, in socket_server_up
    sock.bind((self.host, self.port))
socket.gaierror: [Errno 8] nodename nor servname provided, or not known```  

該当のソースコード

import socket  
import threading  


class SocketServer():  
def __init__(self):  
self.host = socket.gethostname()  
self.port = 50007  
self.clients = []  

def socket_server_up(self):  
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
sock.bind((self.host, self.port))  
sock.listen(5)  
while True:  
try:  
conn, addr = sock.accept()  
except KeyboardInterrupt:  
break  
print("[接続]{}".format(addr))  
self.clients.append((conn, addr))  
thread = threading.Thread(target=self.handler, args=(conn, addr), daemon=True)  
thread.start()  

def close_connection(self, conn, addr):  
print('[切断]{}'.format(addr))  
conn.close()  
self.clients.remove((conn, addr))  

def handler(self, conn, addr):  
while True:  
try:  
data = conn.recv(1024)  
except ConnectionResetError:  
self.close_connection(conn, addr)  
break  

if not data:  
self.close_connection(conn, addr)  
break  
else:  
print('data : {}, addr&port: {}'.format(data, addr))  
for client in self.clients:  
try:  
client[0].sendto(data, client[1])  
except ConnectionResetError:  
break  


if __name__ == "__main__":  
ss = SocketServer()  
ss.socket_server_up()  

補足情報(FW/ツールのバージョンなど)

  • バージョン:Python 3.6.5
  • エディタ:visual studio cord
  • OS:該当の投稿者さんはWindowsで私はMacOSです。
    ここにより詳細な情報を記載してください。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • meg_

    2019/09/01 16:09

    コードにインデントがなく読みにくいです。

    キャンセル

  • meg_

    2019/09/01 16:23

    ターミナルで「ping localhost」を正常に実行できますか?

    キャンセル

  • Q71

    2019/09/03 15:37

    全く同じ質問を、数日前に見たような?
    とりあえず。
    おかしいと言われている変数が、実際どんな値なのか確認する。まずはそこから。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.70%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる