今日内容详细
Socket抽象层(socket编程)
能够唯一标示网络中的进程后,它们就可以利用Socket进行通信了,什么是Socket呢?我们经常把Socket翻译为套接字,Socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信
基于文件类型的套接字家族:
基于网络类型的套接字家族

基于TCP协议的套接字(socket)编程
客户端和服务端应该是谁先发送消息:
客户端先发送消息,需要服务端先运行起来
"""服务端代码:"""
import socket
from socket import AF_INET
server=socket.socket(family=AF_INET, type=socket.SOCK_STREAM)
server.bind(('127.0.0.1', 8000))
server.listen(3)
print(123)
sock, addr = server.accept()
"""sock:当前链接的客户端的链接, addr:就是客户端的地址:ip,port"""
print(234)
data=sock.recv(1024)
print("接收客户端的数据:",data)
sock.send(data.upper())
sock.close()
server.close()
"""客户端代码"""
import socket
from socket import AF_INET
client=socket.socket(family=AF_INET, type=socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8000))
client.send('hello'.encode('utf-8'))
data=client.recv(1024)
print("服务端发来的消息:", data)
client.close()
加上通信和通信循环
import socket
from socket import AF_INET
server=socket.socket(family=AF_INET, type=socket.SOCK_STREAM)
server.bind(('127.0.0.1', 8000))
server.listen(3)
while True:
sock, addr = server.accept()
"""sock:当前链接的客户端的链接, addr:就是客户端的地址:ip,port"""
while True:
try:
"""客户端发送过来的数据是个空,或者"""
data=sock.recv(1024)
print("接收客户端的数据:",data)
sock.send(data.upper())
except Exception as e:
print(e)
break
sock.close()
server.close()
import socket
from socket import AF_INET
client=socket.socket(family=AF_INET, type=socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8000))
while True:
send_data = input('请输入你要发送给服务端的数据:')
client.send(send_data.encode('utf-8'))
data=client.recv(1024)
print("服务端发来的消息:", data)
client.close()
基于UDP协议的套接字编程
"""客户端"""
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
msg = input('>>: ').strip()
client.sendto(msg.encode('utf-8'), ('127.0.0.1', 8080))
data, server_addr = client.recvfrom(1024)
print(data)
client.close()
"""服务端"""
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 8080))
while True:
"""client_addr: 客户端的地址"""
data, client_addr = server.recvfrom(1024)
print('===>', data, client_addr)
server.sendto(data.upper(), client_addr)
server.close()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现