1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonの sendto 、send 、sendall の違い

Posted at

sendto

  • 用途: 主にUDPソケットで使うが、TCPソケットでも使用可能。
  • 機能: データを指定されたアドレスに送信する。
  • 構文: sendto(bytes, address[, flags])
    • bytes: 送信するデータ(バイト形式)。
    • address: 送信先のアドレス(IPアドレスとポート番号のタプル)。
    • flags: オプションのフラグ(省略可能)。
  • 特徴: コネクションレスプロトコル(UDP)に適している。
import socket

# ソケット作成
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
address = ('localhost', 12345)

# データ送信
s.sendto(b'Hello, World!', address)
s.close()

send

  • 用途: 主にTCPソケットで使用。
  • 機能: コネクションが確立された相手にデータを送信する。
  • 構文: send(bytes[, flags])
    • bytes: 送信するデータ(バイト形式)。
    • flags: オプションのフラグ(省略可能)。
  • 特徴: TCP接続でデータを送信するが、バッファサイズに制限があるため、全データを一度に送信できないことがある。
import socket

# ソケット作成
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('example.com', 80))

# データ送信
s.send(b'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n')
s.close()

sendall

  • 用途: 主にTCPソケットで使用。
  • 機能: すべてのデータが送信されるまでブロックする(部分送信の処理を内部で行う)。
  • 構文: sendall(bytes[, flags])
    • bytes: 送信するデータ(バイト形式)。
    • flags: オプションのフラグ(省略可能)。
  • 特徴: データ全体が送信されることを保証する。送信途中でエラーが発生した場合、例外を発生させる。
import socket

# ソケット作成
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('example.com', 80))

# データ送信
s.sendall(b'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n')
s.close()

比較まとめ

メソッド 主な用途 特徴
sendto UDP、TCP データを指定されたアドレスに送信。コネクションレス通信に適している。
send TCP コネクションが確立された相手にデータを送信。バッファサイズによる制限がある場合がある。
sendall TCP データ全体が送信されることを保証。部分送信の処理を内部で行い、送信途中でエラーが発生した場合は例外を発生させる。
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?