客户端:创建TCP链接时,主动发起连接的叫做客户端
服务端:接收客户端的连接
连接其他服务器
可以通过tcp连接其他服务器。
示例:
import socket# 1.创建一个socket
# 参数1:指定协议 AF_INET(ipv4) 或 AF_INET6(ipv6)
# 参数2:SOCK_STREAM执行使用面向流的TCP
sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 建立连接
# 参数:是一个元组,第一个元素为要连接的服务器IP地址,第二个参数为端口
sk.connect(('网站域名', 80))# 发送信息给服务端
sk.send(b'GET / HTTP/1.1\r\nHost: www.aixiashu.info\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0\r\nConnection: close\r\n\r\n')# 等待接收数据
data = []
while True:# 每次接收1k数据temData = sk.recv(1024)if temData:data.append(temData)else:# 接收完数据break
context = (b''.join(data)).decode('utf-8')# 断开链接
sk.close()
print(context)
执行结果:
取出header头和html
示例:
head, html = context.split('\r\n\r\n', 1)
print('响应头:', head)
print('响应文本内容', html)
响应头在浏览器中会自动处理,不会显示在页面中。
执行结果:
客户端与服务器数据交互
服务端
示例:
import socket# 创建一个socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP端口 使用自己本机ip,可通过命令行ipconfig查看获得
server.bind(('192.168.8.111', 8080))# 监听
server.listen(3)
print('服务器启动。。。。。。')# 等待客户端连接
clientSocket, clientAddress = server.accept()
print("%s -- %s 连接成功"%(str(clientSocket), clientAddress))while True:data = clientSocket.recv(1024)print('收到'+str(clientSocket)+'的数据:'+data.decode('utf-8'))message = input('请输入发送给客户端内容:')clientSocket.send(message.encode('utf-8'))
客户端
示例:
import socketclient = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('192.168.8.111', 8080))while True:data = input('请输入发送内容:')client.send(data.encode('utf-8'))info = client.recv(1024)print('服务器:', info.decode('utf-8'))
执行结果:
注意:
停止可以先停止客户端。当前只是单线程,需要多线程才可以多客户端连接。