<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>「ソケット」タグの記事一覧Python Tech</title>
	<atom:link href="https://tech.nkhn37.net/tag/%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88/feed/" rel="self" type="application/rss+xml" />
	<link>https://tech.nkhn37.net</link>
	<description>Python学習サイト</description>
	<lastBuildDate>Sun, 11 Jan 2026 03:23:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://tech.nkhn37.net/wp-content/uploads/2021/01/cropped-lion-normal-clear-1-32x32.png</url>
	<title>「ソケット」タグの記事一覧Python Tech</title>
	<link>https://tech.nkhn37.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Python】ソケット（socket）通信の基本的な使い方</title>
		<link>https://tech.nkhn37.net/python-socket-basic/</link>
					<comments>https://tech.nkhn37.net/python-socket-basic/#respond</comments>
		
		<dc:creator><![CDATA[naoki-hn]]></dc:creator>
		<pubDate>Fri, 12 Jan 2024 20:00:00 +0000</pubDate>
				<category><![CDATA[socket]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[connect]]></category>
		<category><![CDATA[listen]]></category>
		<category><![CDATA[recv]]></category>
		<category><![CDATA[sendall]]></category>
		<category><![CDATA[sendto]]></category>
		<category><![CDATA[socket.AF_INET]]></category>
		<category><![CDATA[socket.SOCK_DGRAM]]></category>
		<category><![CDATA[socket.SOCK_STREAM]]></category>
		<category><![CDATA[tcp]]></category>
		<category><![CDATA[udp]]></category>
		<category><![CDATA[ソケット]]></category>
		<guid isPermaLink="false">https://tech.nkhn37.net/?p=10101</guid>

					<description><![CDATA[Pythonでsocketモジュールでサーバーとクライアント間の通信をする基本的な使い方を解説します。 ソケット(socket)通信 ソケット（socket）通信とは、異なるプロセス間でデータをやり取りするための通信方法 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Pythonで<span class="marker"><strong>socketモジュール</strong></span><span class="marker"><strong>で</strong></span><span class="marker"><strong>サーバーとクライアント間の通信をする基本的な使い方</strong></span>を解説します。</p>



<h2 class="wp-block-heading jinr-heading d--bold">ソケット(socket)通信</h2>



<p><span class="marker"><strong>ソケット（socket）通信</strong></span>とは、異なるプロセス間でデータをやり取りするための通信方法です。通常、ソケット通信では、TCP (Transmission Control Protocol) または UDP (User Datagram Protocol)といったインターネットの通信プロトコルを使用します。</p>



<p>TCPはハンドシェイクというプロセスにより接続を確立して通信をする信頼性の高いプロトコルで、UDPは、接続を確立せずにデータを送信するため高速ですが信頼性は低下します。要件に応じて適切なプロトコルを選択することが重要です</p>



<p>Pythonでは、ソケット通信のためのモジュールとして<span class="marker"><strong>socket</strong></span>モジュールが提供されています。本記事では、socketモジュールでサーバーとクライアント間の通信をする基本的な使い方を紹介します。</p>



<h2 class="wp-block-heading jinr-heading d--bold">socketモジュールを使った通信の基本</h2>



<p>以降で、socketモジュールを利用したソケット通信のためのサーバープログラムおよびクライアントプログラムを紹介します。</p>



<p>通常はサーバーとクライアントは異なる端末間での通信になりますが、今回は自端末(localhost, 127.0.0.1)でサーバープログラムとクライアントプログラムを両方動かすように作成します。ポート番号については、今回は動的・プライベートポートの50000番を使用しますが必要に応じて変更してください。</p>



<p>実際の使用ケースでは、サーバーのIPやポートを適切なものに読み替えて使用してください。また、実用的なアプリケーションでは適切な例外処理が必要ですが、本記事ではsocketの基本的な使い方を説明することを目的とするため、例外処理は除外していますのでご注意ください。</p>



<h3 class="wp-block-heading jinr-heading d--bold">socketを使ったサーバー/クライアント通信</h3>



<h4 class="wp-block-heading jinr-heading d--bold">TCPを使用した通信</h4>



<p>サーバーとクライアント間のsocketを使用した<span class="marker"><strong>TCP通信</strong></span>の例を紹介します。</p>



<h5 class="wp-block-heading jinr-heading d--bold">サーバー側プログラム</h5>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import socket


def tcp_server_program():
    host = "127.0.0.1"
    port = 50000

    # ソケット作成
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server_socket:
        # バインド(ソケットにIPとポート番号を紐づけ)
        server_socket.bind((host, port))
        # 同時接続を1つ待機
        server_socket.listen(1)

        while True:
            # 接続を待機
            conn, address = server_socket.accept()
            with conn:
                while True:
                    # データを受信 (データの最大バイトを1,024)
                    data = conn.recv(1024)
                    if not data:
                        break
                    print(f"data: {data}, address:{address}")


def main():
    tcp_server_program()


if __name__ == "__main__":
    main()</pre>



<p>上記例では、<code>tcp_server_program</code>関数がサーバー機能として動作します。</p>



<p><span class="marker"><strong><code>socket.socket</code></strong></span>関数を使用してソケットを作成します。引数の<span class="marker"><strong><code>socket.AF_INET</code></strong></span>は、IPv4を使用することを意味します。また、<span class="marker"><strong><code>socket.SOCK_STREAM</code></strong></span>は、プロトコルとしてTCPを使用するための指定です。なお、使用後にソケットが適切に閉じられるように<code>with</code>句を使用しています。</p>



<p>ソケットとIP・ポートを紐づけることをバインドといいます。<span class="marker"><strong><code>bind</code></strong></span>を使用して「<code>server_socket.bind((host, port))</code>」の部分でサーバーのIPとポート番号を指定します。また、<span class="marker"><strong><code>listen</code></strong></span>でシステムが処理を受け入れる前にキューに入れる最大数を指定しています。</p>



<p>クライアントからの接続は<code>accept</code>で待機し、接続があると<code>conn</code>と<code>address</code>に接続情報が格納されます。<span class="marker"><strong><code>conn.recv</code></strong></span>でデータを受信しますが、引数で指定している<code>1024</code>は一度に受信するデータの最大バイト数です。<code>1024</code>バイトを超えるデータは複数回受信することになり、受信データがなくなるまでループします。</p>



<h5 class="wp-block-heading jinr-heading d--bold">クライアント側プログラム</h5>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import socket


def tcp_client_program():
    host = "127.0.0.1"
    port = 50000

    # ソケット作成
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket:
        # 接続
        client_socket.connect((host, port))

        # メッセージの作成
        message = b"Message"

        # メッセージをサーバーに送信
        client_socket.sendall(message)


def main():
    tcp_client_program()


if __name__ == "__main__":
    main()</pre>



<p>上記例では、<code>tcp_client_program</code>関数がサーバー機能として動作します。</p>



<p>ソケットの作成方法がサーバー側プログラムと同様です。クライアントがサーバーに接続するためには、<span class="marker"><strong><code>connect</code></strong></span>を使用して「client_socket.connect((host, port))」の部分でサーバーのIPとポート番号を指定します。サーバーの情報であることに注意してください。</p>



<p>その後メッセージを作成して、<span class="marker"><strong><code>sendall</code></strong></span>でサーバーに送信しています。</p>



<h5 class="wp-block-heading jinr-heading d--bold">実行方法と実行結果例</h5>



<p>上記プログラムを実行する場合は、それぞれのプログラムを以下の順で実行します。</p>



<ol class="wp-block-list jinr-list">
<li>サーバー側プログラムを実行する。</li>



<li>別プロンプトを立ち上げてクライアント側プログラムを実行する。</li>
</ol>



<p>サーバー側プログラムを起動した状態でクライアントプログラムを実行すると、クライアントプログラム実行のたびにサーバー側プロンプトでは以下の実行結果例のように受信したメッセージが表示されます。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">【実行結果例】※サーバー側プロンプト
data: b'Message', address:('127.0.0.1', 9161)
data: b'Message', address:('127.0.0.1', 9162)
data: b'Message', address:('127.0.0.1', 9163)</pre>



<p>なお、サーバー側プログラムは受信を待機し続けるように無限ループとなっているので、サーバー側プログラムを停止する際には「<code>Ctrl+C</code>」等で強制終了してください。</p>



<h4 class="wp-block-heading jinr-heading d--bold">UDPを使用した通信</h4>



<p>サーバーとクライアント間のsocketを使用した<span class="marker"><strong>UDP通信</strong></span>の例を紹介していきます。</p>



<h5 class="wp-block-heading jinr-heading d--bold">サーバー側プログラム</h5>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import socket


def udp_server_program():
    host = "127.0.0.1"
    port = 50000

    # ソケット作成
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as server_socket:
        # バインド(ソケットにIPとポート番号を紐づけ)
        server_socket.bind((host, port))

        while True:
            # データを受信 (データの最大バイトを1,024)
            data, address = server_socket.recvfrom(1024)
            print(f"data: {data}, address:{address}")


def main():
    udp_server_program()


if __name__ == "__main__":
    main()</pre>



<p>UDPの場合も、TCPのプログラム例とよく似ています。上記例では、udp_server_program`関数がサーバー機能として動作します。</p>



<p>ソケット作成やバインドの方法は、TCPの場合とほとんど同じですが、今回はソケット作成時にUDPプロトコルを示す<span class="marker"><strong><code>socket.SOCK_DGRAM</code></strong></span>を指定します。</p>



<p>データの受信の部分では、TCPでは<code>accept</code>で接続確立をしていましたが、UDPは接続確立が不要であるため直接<span class="marker"><strong><code>recvfrom</code></strong></span>でデータを受信しています。</p>



<h5 class="wp-block-heading jinr-heading d--bold">クライアント側プログラム</h5>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import socket


def udp_client_program():
    host = "127.0.0.1"
    port = 50000

    # ソケット作成
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as client_socket:
        # メッセージの作成
        message = b"Message"

        # メッセージをサーバーに送信
        client_socket.sendto(message, (host, port))


def main():
    udp_client_program()


if __name__ == "__main__":
    main()</pre>



<p>クライアントプログラムについても見ていただけると分かる通りTCPの場合とほとんど同じですが、ソケット作成時には、UDPプロトコルを示す<code>socket.SOCK_DGRAM</code>を指定します。</p>



<p>また、TCPでは<code>connect</code>で接続確立をしていましたがUDPでは不要なため直接<span class="marker"><strong><code>sendto</code></strong></span>によりサーバーにデータを送信しています。<code>sendto</code>では、第1引数にデータを、第2引数にサーバーのIPとポートのタプルを指定します。</p>



<h5 class="wp-block-heading jinr-heading d--bold">実行方法と実行結果例</h5>



<p>実行方法はTCPの例で紹介した方法と同様です。結果としては同じ結果になります。</p>



<p>UDPでは、接続を確立せずにデータを送信するため高速ですが信頼性は低下します。そのため、使用する場面についてはよく要件を確認して採用するようにしましょう。</p>



<h2 class="wp-block-heading jinr-heading d--bold">まとめ</h2>



<p>Pythonで<span class="marker"><strong>socketモジュールでサーバーとクライアント間の通信をする基本的な使い方</strong></span>を解説しました。</p>



<p>Pythonでは、ソケット通信のためのモジュールとして<span class="marker"><strong>socket</strong></span>モジュールが提供されています。ソケット通信は通常TCP、UDPといったプロトコルを使用するため、それぞれの使用例について紹介しました。</p>



<p>なお、本記事ではsocketの基本的な使い方を説明することを目的としましたので例外処理は除外しています。そのため、実用的なアプリケーションでは例外に対する処理やセキュリティなどについて十分に考慮する必要がある点は注意してください。</p>



<p>ソケット通信は、プロセス間の通信の基本的な内容になるため、是非socketの使い方を理解してもらえればと思います。</p>



<section class="wp-block-jinr-blocks-simplebox b--jinr-block-container"><div class="b--jinr-block b--jinr-box d--heading-box8  "><div class="a--simple-box-title d--bold">ソースコード</div><div class="c--simple-box-inner">
<p>上記で紹介しているソースコードについては <a href="https://github.com/nkhn37/python-tech-sample-source/tree/main/python-libraries/socket" target="_blank" rel="noreferrer noopener">GitHub</a> にて公開しています。参考にしていただければと思います。</p>
</div></div></section>


<section class="b--jinr-block b--jinr-blogcard d--blogcard-hover-up d--blogcard-style1 d--blogcard-mysite t--round "><div class="a--blogcard-label ef">あわせて読みたい</div><a class="o--blogcard-link t--round" href="https://tech.nkhn37.net/python-tech-summary-page/"><div class="c--blogcard-image"><img decoding="async" class="a--blogcard-img-src" width="128" height="72" src="https://tech.nkhn37.net/wp-content/uploads/2024/08/Python-Tech-Pythonプログラミングガイド_new1-640x360.jpg" alt="【Python Tech】プログラミングガイド" /></div><div class="a--blogcard-title d--bold">【Python Tech】プログラミングガイド</div></a></section>]]></content:encoded>
					
					<wfw:commentRss>https://tech.nkhn37.net/python-socket-basic/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: tech.nkhn37.net @ 2026-05-25 04:35:50 by W3 Total Cache
-->