实验三-20222314陈振烨 Socket编程

落影_ 2023-06-07 19:00:34

20222314 陈振烨《Python程序设计》实验三报告

课程:《Python程序设计》
班级: 2223
姓名: 吴昊宇
学号:20222314
实验教师:王志强
实验日期:2023年4月20日
必修/选修: 公选课

1.实验内容

创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。

2. 实验过程及结果

#客户端
import socket

# 创建套接字对象,AF_INET基于TCP/UDP通信,SOCK_STREAM以数据流的形式传输数据,这里就可以确定是TCP了
server = socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)

# 绑定ip地址和端口,127.0.0.1代表回环地址,只能当前计算机访问
server.bind(('127.0.0.1',8080))

# 建立半链接池,允许存放5个请求
server.listen(5)

# 等待建立连接请求,会返回两个值,一个是连接会话,一个是连接的客户端IP与端口
conn,ip_addr = server.accept()

while True:
    # 接收客户端传递的数据,不能超过1024字节
    res = conn.recv(1024)

    # 将客户端的数据接收到以后,转换成大写再编码后发送给客户端
    conn.send(res.decode('utf-8').upper().encode('utf-8'))

    # 注意:close不能放在这里面,因为在这里面的话,只能一次后就关闭了

# 关闭与客户端的连接
conn.close()

# 关闭套接字
server.close()

 

#客户端
import socket

# 创建套接字对象,AF_INET基于TCP/UDP通信,SOCK_STREAM以数据流的形式传输数据,这里就可以确定是TCP了
client = socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)

# 连接服务端
client.connect(('127.0.0.1',8080))

while True:
    inp = input('>>>:').strip()
    # 向服务端发送数据,需要转换成Bytes类型发送
    client.send(inp.encode('utf-8'))

    # 接收服务端回应给客户端的数据,不能超过1024字节
    res = client.recv(1024)

    print(res.decode('utf-8'))

# 套接字关闭
client.close()

运行结果:

先启动服务端

再启动客户端

 思考与反思:

    刚开始我并没有采用127.0.0.1来作为链接端口,而是采用了我电脑的ip(之前尝试过使用同学的ip,但是需要防火墙关闭,就没让我南京的同学以为我号被盗了是骗子说啥也不信,就没继续操作下去),但是仍然出现了拒绝链接的反馈,我使用nmap扫描了自己的端口,并没有问题,防火墙我也关了,至于为什么不行我还是没搞清楚,可能是因为权限不够?需要root权限?我还是不懂,这也是我本次试验的遗憾。当然,换成127.0.0.1(默认连自己)之后就可以了,也不需要做什么开防火墙权限和自定义可接受协议之类的杂活

感悟:socket其实并不是一门只能基于python的通信方式,它可以依赖于大多数语言,以后希望有机会可以实现更多的通信项目,加强自己对于通信领域的理解(虽然我不是通信专业的哈哈哈)

 

...全文
601 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文档为《Hibernate 全套完整学习笔记(完整版·无遗漏)》,系统整合了 Hibernate 框架从基础到高级的全部核心知识点,涵盖前置知识、环境搭建、实体映射、关联关系、查询体系、缓存机制、事务与锁、性能优化、框架整合(Spring/SpringBoot/JPA)、企业实战功能及高频面试题。深入讲解了 Hibernate 的 ORM 映射原理、主键生成策略、延迟加载与抓取策略、N+1 问题根治方案、乐观锁与悲观锁机制、二级缓存集成 Redis、Envers 审计、自定义类型、批量操作优化等关键内容,并提供大量可运行代码示例与企业级最佳实践。; 适合人群:具备 Java 和数据库基础,从事或希望从事 Java EE 开发、SSH/SSM 框架开发,尤其是使用 Hibernate 或 JPA 的中高级研发人员(工作年限1-5年),以及准备相关技术面试的开发者。; 使用场景及目标:① 掌握 Hibernate 核心机制如一级/二级缓存、脏检查、延迟加载与 N+1 问题解决方案;② 理解并应用主键策略、关联映射、事务隔离、锁机制等高级特性;③ 实现企业级性能优化,如批量处理、投影查询、抓取策略调优;④ 完成与 Spring Boot、Redis 的整合实战;⑤ 高效应对 Hibernate 相关面试考察。; 阅读建议:本资料结构清晰、层次分明,建议按照“基础→核心→高级→实战”顺序系统学习,重点理解懒加载与抓取策略、N+1 问题、缓存体系等高频难点,结合代码动手实践,调试 SQL 输出与缓存行为,强化对框架底层机制的理解。

144

社区成员

发帖
与我相关
我的任务
社区描述
开展Python教学和技术交流
python 高校 北京·丰台区
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧