实验三

20193211 2019-2020-2 《Python程序设计》实验3报告

课程:《Python程序设计》

班级:1932

姓名:冷聃 

学号:20193211

实验教师:王志强 

实验日期:2020年5月30日

必修/选修: 公选课

实验内容

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

实验要求

1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;

2)要求包含文件的基本操作,例如打开和读写操作。

3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。

4)程序代码托管到码云。

三.实验过程及结果

(1)Socket编程工作原理:

服务器端:服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。

客户端:客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

2)编程模板:

TCP服务端:

创建套接字,绑定套接字到本地IP与端口#socket.socket(socket.AF_INET,socket.SOCK_STREAM),s.bind()

开始监听连接#s.listen()

进入循环,不断接受客户端的连接请求#s.accept()

然后接收传来的数据,并发送给对方数据#s.recv(),s.sendall()

传输完毕后,关闭套接字#s.close()

TCP客户端:

创建套接字,连接远端地址#socket.socket(socket.AF_INET,socket.SOCK_STREAM),s.connect()

连接后发送数据和接收数据#s.sendall(),s.recv()

传输完毕后,关闭套接字#s.close()

 

注意:TCPUDP

TCP发送数据时,已建立好TCP连接,所以不需要指定地址。UDP是面向无连接的,每次发送要指定是发给谁。

服务端与客户端不能直接发送列表,元组,字典。需要字符串化repr(data)

3)代码:

服务器:

 

import socket
import base64

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 8010))
s.listen()
conn, address = s.accept()
data = conn.recv(1024)
f = open("receive.txt", "w")
data1 = base64.b32decode(data)
f.write(data1.decode())
f.close()
print("收到来自客户端的密文:", data.decode(), "\n已解密至receive文件中")
conn.sendall("密文已接收!".encode())
data1 = conn.recv(1024)
print("来自客户端的信息", data1.decode())
s.close()

 

 

 

客户端

import socket
import base64

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 8010))
text = input("请输入要消息:")
file = open('send.txt', 'a+')
file.write(text)
print('内容已保存')
text = text.encode('utf-8')
encode_text = base64.b32encode(text)
s.sendall(encode_text)


file.close()
data = s.recv(1024)
print("客户端的信息:", data.decode())
s.sendall("收到".encode())
print("内容已加密传输")
s.sendall("客户端已接收!".encode())
s.close()

4)操作:

1. 关闭防火墙

2. 运行服务器端,然后运行客户端

(5)结果:

客户端:

服务器:

 

 

四.实验过程中遇到的问题和解决过程

- 问题1:import变成灰色

- 问题1解决方案:“Suppress for statement”

五.其他(感悟、思考等)

   实验代码修修改改才写好。学习编程需要投入时间练习,动手才能发现问题。

 

 

## 参考资料

-  [《Java程序设计与数据结构教程(第二版)》](https://book.douban.com/subject/26851579/)

-  [《Java程序设计与数据结构教程(第二版)》学习指导](http://www.cnblogs.com/rocedu/p/5182332.html)

posted @ 2021-05-30 20:55  ldoo1  阅读(57)  评论(0编辑  收藏  举报