20213305 实验三《Python程序设计》实验报告

20213305《Python程序设计》实验三报告

课程:《Python程序设计》
班级: 2133
姓名: 张桉源
学号:20213305
实验教师:王志强
实验日期:2020年4月21日
必修/选修: 公选课

(一)实验内容

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

(二)实验要求

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

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

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

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

(三)实验过程及实验结果

3.1客户端代码(老师提供):

3.2服务器端代码(老师提供):

3.3运行结果:

 

3.4加密后客户端代码:

# client.py

import socket

 

# HOST = 'localhost'

HOST = '192.168.10.191'

PORT = 5050

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:

     s.connect((HOST, PORT))

     while True:  #while里面只能有send和recieve

         msg=input("请输入你想传达的信息,传入exit则退出\n")

         if msg=="exit":

               break

# client先发送消息再接收

s.sendall(msg.encode())

data = s.recv(1024)

print(f"他说 {data.decode()}")

3.5加密后服务端代码:

import socket

 

HOST = ''  #主机

PORT = 5050  #端口

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:

     s.bind((HOST, PORT))

     #bind(address), 传输层为AF_INET时address是(主机host,端口port)格式

     s.listen(2)

   conn, addr = s.accept()

     #conn新的套接字对象,用于接收发送数据,

     # addr客户端地址为元组(hostname, port)

 

     with conn:  #while里面只能有recieve和send

          print('Connected by', addr)

          while True:  #server先接收再发送

              data = conn.recv(1024)

              print(f"{addr}说:{data.decode()}")

              server_msg=input("请输入你想回复的内容,输入exit则退出:\n")

              conn.sendall(server_msg.encode())

              if server_msg=="exit":

                 break

3.6上传代码到gitee:

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

- 问题1:不会加密传输的信息。

- 问题1解决方案:查看老师发的资料并自己上知乎搜索相关内容,询问已经提交作业的同学。

- 问题2:运行终端时显示无法连接。

- 问题2解决方案:应该先运行服务端,再运行客户端。

 

 

 

 

 

 

 

 

 

 

 

 

import socket
HOST = ''  #主机PORT = 5050  #端口with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:s.bind((HOST, PORT))#bind(address), 传输层为AF_INET时address是(主机host,端口port)格式s.listen(2)conn, addr = s.accept()#conn新的套接字对象,用于接收发送数据,# addr客户端地址为元组(hostname, port)
with conn:  #while里面只能有recieve和sendprint('Connected by', addr)while True:  #server先接收再发送data = conn.recv(1024)print(f"{addr}说:{data.decode()}")server_msg=input("请输入你想回复的内容,输入exit则退出:\n")conn.sendall(server_msg.encode())if server_msg=="exit":break
 
posted @ 2022-05-04 13:30  2133张某  阅读(46)  评论(0编辑  收藏  举报