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()

相关推荐
酉鬼女又兒1 分钟前
零基础入门计算机网络网际层核心:IP数据报发送与转发完整流程、静态路由配置方法、路由环路成因与解决方案及历年考研经典例题深度解析
网络·tcp/ip·计算机网络·考研·职场和发展
我星期八休息5 分钟前
Linux系统编程—mmap文件映射
java·linux·运维·服务器·数据库·mysql·spring
phltxy11 分钟前
Spring AI 智能咨询系统综合实战
java·人工智能·spring
java1234_小锋14 分钟前
Spring Boot 中 Starter 是什么?它的核心规范有哪些?请说明如何自定义一个 Starter。
java·spring boot·后端
良枫14 分钟前
自进化 agent:核心模块一任务规划器 Planner
java·服务器·windows
AI人工智能+电脑小能手17 分钟前
【大白话说Java面试题 第114题】【并发篇】第14题:说一下悲观锁的优点和缺点?
java·开发语言·面试
hyunbar77718 分钟前
配置 Cloudflare Tunnel:把 Mac 上的 Web 服务变成安全域名
网络协议
让我上个超影吧21 分钟前
Claude Code 源码看 Agent 系统设计
java·ai·ai编程
plainGeekDev22 分钟前
网络状态监听 → ConnectivityManager + Flow
android·java·kotlin
devilnumber22 分钟前
Java 迭代器(Iterator)完全指南:从入门到实战
java·开发语言·迭代器