Socket编程
小于 1 分钟
Socket的编程模型如下图。

server
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# bind需要传递tuple作为参数
server.bind(('0.0.0.0', 8080))
server.listen(3)
client, addr = server.accept()
# 获取从客户端发过来的数据
while True:
data = client.recv(1024)
print(data.decode("utf8"))
res = input(">>>: ")
if res == "exit":
client.close()
server.close()
break
client.send(res.encode("utf8"))
client
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 与服务端参数保持一致
client.connect(('127.0.0.1', 8080))
while True:
res = input(">>>: ")
if res == "exit":
break
client.send(input(">>>: ").encode("utf8"))
data = client.recv(1024)
print(data.decode("utf8"))
client.close()
http
import socket
from urllib.parse import urlparse
def get_html(url):
# 通过socket请求html
url = urlparse(url)
host = url.netloc
path = url.path
if path == "":
path = "/"
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((host, 80))
client.send("GET {} HTTP/1.1\r\nHost:{}\r\nConnection:close\r\n\r\n".format(path, host).encode("utf-8"))
data = b""
while True:
recv = client.recv(1024)
if recv:
data += recv
else:
break
data = data.decode("utf-8")
html_data = data.split("\r\n\r\n")[1]
print(html_data)
client.close()
get_html("http://www.baidu.com")
感谢支持
更多内容,请移步《超级个体》。