📜  主机名、端口、socket.AF_UNSPEC、socket.SOCK_STREAM (1)

📅  最后修改于: 2023-12-03 15:36:01.762000             🧑  作者: Mango

Python Socket介绍

Python中的socket模块提供了网络编程所需的所有功能。它可以用于客户端和服务器之间的通信。在本文中,我们将介绍如何使用Python socket模块中常见的参数进行TCP客户端编程。

什么是TCP Socket

TCP(传输控制协议)是一种可靠且有序的协议,用于两个应用程序之间的通信。在TCP连接的两个端点之间,数据通过按顺序进行传输,错误会被检测并纠正。通常,TCP Socket客户端应用程序会连接到服务端主机并发送数据。然后,服务器处理数据并响应客户端请求。

主机名

在TCP Socket编程中,主机名指的是IP地址。例如,如果我们想要连接到远程服务器,则需要知道该服务器的IP地址。主机名可以是IPv4地址(例如,'192.0.2.1'),也可以是IPv6地址。

端口

在TCP Socket编程中,端口是指通信的端点。每个端口都与一个应用程序相关联。要连接到远程服务器,需要知道该服务器正在监听的端口。常见的端口号包括80(用于HTTP协议)、443(用于HTTPS协议)和21(用于FTP协议)。

socket.AF_UNSPEC

它是一种特殊的地址族,用于指示在IPv4或IPv6地址族中选择合适的协议。在许多情况下,我们希望Python选择合适的协议。这时候就要用到socket.AF_UNSPEC。

socket.SOCK_STREAM

使用SOCK_STREAM类型的Socket意味着我们希望使用TCP协议。TCP协议提供了可靠,面向连接的服务。当使用TCP Socket时,数据一旦发送,就会等待远程主机的响应。如果发生错误,将进行纠正并重新发送数据。

示例代码

下面是一个使用 Python Socket模块 连接到Google的简单例子,其中在创建 Socket 时使用了主机名、端口、socket.AF_UNSPEC和socket.SOCK_STREAM参数:

import socket

HOST = 'www.google.com'
PORT = 80
protocol = socket.AF_UNSPEC
socket_type = socket.SOCK_STREAM

with socket.socket(protocol, socket_type) as s:
    s.connect((HOST, PORT))
    s.sendall(b'GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n')
    data = s.recv(1024)

print(repr(data))

在上面的代码中,我们使用AF_UNSPEC代替IPv4或IPv6,以便选择合适的协议。 此外,我们使用SOCK_STREAM指定TCP协议。 然后,我们连接到谷歌并发送一个HTTP GET请求。 最后,我们发送数据并等待响应。