0
1

Pythonによるソケット通信

Posted at

クライアント側、サーバ側の両方は基本的にsocketを設立して以下のシーケンスのように通信を行う。

サーバ側

以下のように実装を書いた。

import socket
import time

host = '127.0.0.1'
port = 65000
buff = 1024

# ソケットを設立する
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind((host, port))

while True:
  # クライアントからの接続を待つ
  server.listen(1)
  print('Waiting for connection')
  # クライアントからの接続を受け取る
  client, addr = server.accept()
  print('Established connection')

  while True:
    try:
      # クライアントへメッセージを送信する
      client.send('Hello,World'.encode("utf-8"))
      time.sleep(1)
    except socket.error:
      client.close()
      break

クライアント側

以下のように実装を書いた。

import socket
import time

host = '127.0.0.1'
port = 65000
buff = 1024

# ソケットを設立し、サーバへ接続する関数
def make_connection(_host, _port):
  while True:
    try:
      sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
      sock.connect((_host, _port))
      print('connected')
      return sock
    except socket.error as e:
      print('failed to connect, try reconnect')
      time.sleep(1)

# サーバに接続する
socket = make_connection(host, port)

try:
    # サーバからメッセージを受け取る
    msg = socket.recv(buff)
    print('Client received: %s' % msg)
    time.sleep(1)
except socket.error as e:
    print('connection lost, try reconnect')

参考

0
1
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
0
1