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

相关推荐
皮皮林55111 小时前
拒绝写重复代码,试试这套开源的 SpringBoot 组件,效率翻倍~
java·spring boot
Sheffield15 小时前
Docker的跨主机服务与其对应的优缺点
linux·网络协议·docker
顺风尿一寸15 小时前
从 Java NIO poll 到 Linux 内核 poll:一次系统调用的完整旅程
java
程途知微15 小时前
JVM运行时数据区各区域作用与溢出原理
java
华仔啊18 小时前
为啥不用 MP 的 saveOrUpdateBatch?MySQL 一条 SQL 批量增改才是最优解
java·后端
xiaoye201820 小时前
Lettuce连接模型、命令执行、Pipeline 浅析
java
beata1 天前
Java基础-18:Java开发中的常用设计模式:深入解析与实战应用
java·后端
Seven971 天前
剑指offer-81、⼆叉搜索树的最近公共祖先
java
雨中飘荡的记忆2 天前
保证金系统入门到实战
java·后端
Nyarlathotep01132 天前
Java内存模型
java