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

相关推荐
考虑考虑30 分钟前
JDK27中的Set.ofLazy
java·后端·java ee
文丑颜不良啊40 分钟前
LeetCode2841~2860题目解析
java·leetcode
小南家的青蛙40 分钟前
Tomcat与Jetty深度对比
java·tomcat·jetty
乌暮2 小时前
Spring AOP 与 Spring 事务:用大白话彻底理解原理与实践
java·数据库·spring boot·后端·sql·学习·spring
YDS8292 小时前
Small Spring IOC篇:容器事件及其监听器
java·spring
金銀銅鐵2 小时前
带您看懂字节码指令(三):一行加法里有什么
java·jvm
文丑颜不良啊2 小时前
LeetCode2921~2940题目解析
java·leetcode
北漂人Java3 小时前
基于 Spring AI Alibaba WorkFlow 构建 Java 生产级 AI Agent
java·人工智能·spring
用户112936112194 小时前
编译全绿,上线就崩:MyBatis 五层方法名大小写埋下的坑
java
文丑颜不良啊5 小时前
LeetCode2901~2920题目解析
java·leetcode