TCP socket编程

一、服务端代码

#encoding = utf -8

#导入socket库

from socket import *

#等待客户端来连接,主机地址为0.0.0.0表示绑定本机所有网络接口ip地址

IP = '0.0.0.0'

#端口号

PORT = 50000

#定义一次从socket缓存区最多读入512个字节数据

BUFLEN = 512

#实例化一个socket编程

#参数AF_INET 表示该socket网络层使用IP协议

#参数SOCK_STREAM表示该socket传输层使用tcp协议

listenSocket = socket(AF_INET, SOCK_STREAM)

#socket 绑定地址和端口

listenSocket.bind((IP, PORT))

#使socket处于监听状态,等待客户端连接请求

#参数5表示 最多接受多少个等待连接的客户端

listenSocket.listen(5)

print(f"服务端启动成功,在{PORT} 端口等待客户端连接 ......")

dataSocket, addr = listenSocket.accept()

print("接受一个客户端连接: ", addr)

while True:

#尝试读取对方发送的消息

BUFLEN 指定从接受缓冲里最多读取多少字节

recved = dataSocket.rec(BUFLEN)

#如果返回空Bytes,表示对方关闭了连接

#退出循环,结束消息收发

if not recved:

break

#读取的字节数据是Bytes类型,需要解码为字符串

info = recved.decode()

print(f"收到对方消息: {info}")

#发送的数据类型必须的bytes,所以需要编码

dataSocket.send(f"服务端接收了信息 {info}".encode())

#服务端调用close()关闭socket

dataSocket.close()

listenSocket.close()

二、客户端代码

#encoding = utf -8

#导入socket库

from socket import *

IP = '127.0.0.1'

SERVER_PORT = 50000

BUFLEN = 512

#实例化一个socket编程,指明协议

dataSocket = socket(AF_INET, SOCK_STREAM)

#连接服务端socket

dataSocket.connect((IP, SERVER_PORT))

while True:

#从终端读入用户输入的字符串

toSend = input(" >> ")

if toSend == "":

break

#发送消息,编码为bytes

dataSocket.send(toSend.encode())

#等待接收服务端的消息

recved = dataSocket.recv(BUFLEN)

#如果返回空Bytes,表示对方关闭了连接

if not recved:

break

#打印读取的消息

print(recved.decode())

dataSocket.close()

相关推荐
ffqws_12 分钟前
Spring Boot 配置读取全解析:从 application.yml 到 Java 对象的完整链路
java·数据库·spring boot
clear sky .13 分钟前
【TCP】TCP数据粘包/分包问题
java·服务器·网络
云烟成雨TD13 分钟前
Spring AI 1.x 系列【29】Embedding Model(嵌入模型)
java·人工智能·spring
幸福巡礼23 分钟前
【 LangChain 1.2 实战(四)】构建一个模块化的天气查询 Agent
java·前端·langchain
wuminyu10 小时前
专家视角看Java字节码加载与存储指令机制
java·linux·c语言·jvm·c++
不会敲代码111 小时前
TCP/IP 与前端性能:从数据包到首次渲染的底层逻辑
前端·tcp/ip
callJJ11 小时前
Spring Data Redis 两种编程模型详解:同步 vs 响应式
java·spring boot·redis·python·spring
S1998_1997111609•X11 小时前
论mysql国盾shell-sfa犯罪行为集团下的分项工程及反向注入原理尐深度纳米算法下的鐌檵鄐鉎行为
网络·数据库·网络协议·百度·开闭原则
wbs_scy12 小时前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言
jinanwuhuaguo13 小时前
(第三十三篇)五月的文明奠基:OpenClaw 2026.5.2版本的文明级解读
android·java·开发语言·人工智能·github·拓扑学·openclaw