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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

3回答

1578閲覧

pyrhonでソケット(socket)通信を実行したい

退会済みユーザー

退会済みユーザー

総合スコア0

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/08/31 23:20

編集2019/09/01 00:23

よろしくお願いします。
pythonでソケット通信を体験したいと思い、https://qiita.com/__init__/items/d83b6f23b53e56417702からプログラムをコピペして動かしてみたのですがエラーが出ます。

###該当のソースコード

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()

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

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

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

バージョン:Python 3.6.5
エディタ:visual studio code
投稿主さんのOShWindows、私はMacOSです。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/08/31 23:50

このままではコードが読めないので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
退会済みユーザー

退会済みユーザー

2019/09/01 00:15

訂正依頼ありがとうございます。
guest

回答3

0

pythonでソケット通信を体験したいと思い、

「体験」が目的であれば、自分の環境にあったプログラムを探しましょう。
「学習」が目的であれば、コピペするだけじゃなくて、自分で考えましょう。

おそらく、gethostname()がうまくいってないか、その先のgethostbyname()がうまくいってないと思われます。

「体験」が目的であれば、self.hostの代わりに"0.0.0.0"を指定すればいいかと。

投稿2019/09/01 00:32

otn

総合スコア84538

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FIC-d

2021/09/27 12:36

self.hostの代わりにipv6でもいいかと。
guest

0

socket.gaierror: [Errno 8] 指定されたノード名またはサーバー名、または不明

ということなので、
self.hostに何が入ってるのか見てみることでしょうね。
そのナカミは存在するホスト名なんでしょうか。

投稿2019/09/01 00:32

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

大抵ことは、エラーメッセージをそのまま検索すれば、答えが出てきます。
socketでのbindでエラー

ちなみに、検索結果

追記
エラーとは、「誤り、間違い」という意味です。ですから、エラーが出ているところに間違いがあるのは、ほぼ確実です。
メッセージとは、「伝言、伝達事項」という意味です。エラーの内容、場合によっては原因をあなたに伝えるために書かれています。
ですから、まずはエラーメッセージを読みましょう。
エラーメッセージは「socket.gaierror: [Errno 8] nodename nor servname provided, or not known」ですが、「ノード名、サーバー名が指定されていない、または不明」ということです。ここから「(self.host, self.port) に何か問題がある」とわかります。
ということは、これらの値を確認することが必要です。

python

1print((self.host, self.port)) # この行を追加 2sock.bind((self.host, self.port))

これで内容を確認して、何がおかしいのかを特定し、それをただす方法を考えます。
今の時点では原因不明なのでここまで。

投稿2019/09/01 00:02

編集2019/09/01 00:45
Q71

総合スコア995

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/01 00:19

すみません。 検索してはみたのですが、まだプログラミングがわからないところが多く理解できない部分が多かったためこのような質問という形で調べさしていただきました。 つきましては、もし訂正する箇所がわかっているのなら教えてもらいたいです。
Q71

2019/09/01 00:24

貼り付けた先の質問の答えで、何がわからない、理解できないのでしょうか。「理解するつもりがありません」ではないのなら、「この部分がわからない」という聞き方をしてください。 私は、「なぜエラーになっているのか」「どうすればエラーの原因であると確認できるか」「対象方法」が書かれてあると理解したので、貼り付けました。私も、同じように回答するでしょう。では、何がわからないのでしょうか。それに応えていただけないと、私には答えられません。
退会済みユーザー

退会済みユーザー

2019/09/01 00:28

度々失礼わかりにくい文章ですみません。 「この部分がわからない」などではなく「何が間違っているかどこが間違っているかもわからない状況」です。わざわざ回答していただいているのに適切な文章でないこと申し訳ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問