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

#学号20214118 《python程序设计》实验三报告

课程: 《python程序设计》

班级:2141

姓名:韦星宇

学号:20214118

实验教师:王志强

实验日期:2022年4月26日

必修/选修:公选课

##1.实验内容

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

##2.实验过程及结果

socket库介绍

创建Socket

socket.socket函数的前两个参数的默认值是socket.AF_INET和socket.SOCK_STREAM,创建TCP socket时可以直接写成socket.socket()。

1 import socket
2 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

连接服务器

1 s.connect(('127.0.0.1', 8000))

发送数据

sendall() 发送完整的TCP数据,成功返回None,失败抛出异常

1 data = "something you want to send"
2   
3 s.sendall(data) 

关闭连接

当连接不再需要时可以使用close关闭socket连接,关闭后的连接不能再进行任何操作。

1 sk.close()  

编写程序

服务端

 1 import socket
 2 # 创建服务器端套接字
 3 sk = socket.socket()
 4 # 设置给定套接字选项的值。
 5 # sk.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 6 # 把地址绑定到套接字
 7 sk.bind(('127.0.0.1', 8898))
 8 # 监听链接
 9 sk.listen()
10 # 接受客户端链接
11 conn, addr = sk.accept()
12 while True:
13     # 接收客户端信息
14     ret = conn.recv(1024)
15     # 打印客户端信息
16     print(ret.decode('utf-8'))
17     # 结束处理
18     if ret == b'bye':
19         conn.send(b'bye')
20         break
21     info = input('>>>')
22     conn.send(bytes(info, encoding='utf-8'))
23 # 关闭客户端链接
24 conn.close()
25 # 关闭服务器套接字
26 sk.close()

客户端

 1 import socket
 2 # 创建客户端套接字
 3 sk = socket.socket()           
 4 # 尝试连接服务器
 5 sk.connect(('127.0.0.1',8898))
 6 while True:
 7     # 信息发送
 8     info = input('>>>')
 9     sk.send(bytes(info,encoding='utf-8'))
10     # 信息接收
11     ret = sk.recv(1024)
12     # 结束会话
13     if ret == b'bye':
14         sk.send(b'bye')
15         break
16     # 信息打印
17     print(ret.decode('utf-8'))
18 # 关闭客户端套接字
19 sk.close()

运行

在Pycham中打开Terminal1,运行服务器程序,可以和客户端程序聊天,打bye结束。

打开Terminal2,运行客户端程序,可以和服务器程序聊天,打bye结束。

##3.实验过程中遇到的问题及结果

- 问题1:选用send() 函数,发送数据,数据不全

- 问题1解决方案:查资料得知:send() 发送TCP数据,返回发送的字节大小。这个字节长度可能少于实际要发送的数据的长度。换句话说,这个函数执行一次,并不一定能发送完给定的数据,可能需要重复多次才能发送完成。

1 data = "something you want to send"
2 while True: 
3   len = s.send(data[len:]) 
4   if not len: 
5     break

## 其他

通过实验三,认识了Socket——"套接字"。

在应用中,它基础而关键:应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

posted @ 2022-04-26 21:14  韦星宇  阅读(86)  评论(0编辑  收藏  举报