您现在的位置是:首页 >其他 >Python的网络编程和socket(通过故事来学习)网站首页其他
Python的网络编程和socket(通过故事来学习)
有一天,有一个名叫小云的开发者,她刚学了 Python 网络编程,并且想试着用 socket 编写一个简单的客户端-服务器程序。
小云打开了她的 Python 编辑器,开始编写客户端的代码。她创建了一个 socket 对象,然后使用该对象连接到服务器。她编写了以下代码:
```python
import socket
import sys
def client_program():
host = socket.gethostname() # 获取主机名
port = 5000 # 设置端口号
client_socket = socket.socket() # 创建 socket 对象
client_socket.connect((host, port)) # 连接服务器
message = input(" -> ") # 输入消息
client_socket.send(message.encode()) # 发送消息
data = client_socket.recv(1024).decode() # 接收消息
print('Received from server: ' + data) # 打印接收到的消息
client_socket.close() # 关闭连接
if __name__ == '__main__':
client_program()
```
小云很高兴自己能够编写出这样的客户端程序。但是她知道,这个程序还没有完成。她还需要编写一个简单的服务器程序来处理客户端发送的消息。
于是,小云开始编写服务器的代码。她创建了一个 socket 对象,并让该对象监听来自客户端的连接请求。当客户端连接到服务器后,服务器接收并处理客户端发送的消息。
以下是她编写的服务器代码:
```python
import socket
import sys
def server_program():
host = socket.gethostname() # 获取主机名
port = 5000 # 设置端口号
server_socket = socket.socket() # 创建 socket 对象
server_socket.bind((host, port)) # 绑定端口
server_socket.listen(2) # 监听连接请求
conn, address = server_socket.accept() # 接受客户端连接
print("Connection from: " + str(address))
while True:
data = conn.recv(1024).decode() # 接收消息
if not data:
break
print("from connected user: " + str(data))
data = str(data).upper() # 将消息转换为大写
print("sending: " + str(data))
conn.send(data.encode()) # 发送消息
conn.close() # 关闭连接
if __name__ == '__main__':
server_program()
```
小云很自豪地运行了她的客户端和服务器程序,并在命令行中输入了一些消息。她很高兴地发现,她能够成功地发送和接收消息,并用服务器将消息转换为大写后返回给客户端。