使用Python编写一个简单的网络服务器程序
发布时间:2023-12-04 11:56:04
下面是一个使用Python编写的简单的网络服务器程序,可以与客户端建立连接并发送接收数据。服务器程序使用Socket模块提供的函数和方法来实现。
import socket
def server_program():
# 获取本地主机名
host = socket.gethostname()
port = 5000 # 设置端口号
# 创建一个套接字对象
server_socket = socket.socket()
# 将套接字绑定到特定主机和端口
server_socket.bind((host, port))
# 监听来自客户端的连接
server_socket.listen(2)
# 等待连接
print('服务器等待连接...')
conn, address = server_socket.accept()
print('连接来自: ' + str(address))
while True:
# 接收客户端发送的数据
data = conn.recv(1024).decode()
if not data:
# 如果没有数据,跳出循环
break
print('来自客户端的消息:' + str(data))
# 发送响应给客户端
message = input(' -> ')
conn.send(message.encode())
# 关闭连接
conn.close()
if __name__ == '__main__':
server_program()
在上述服务器程序中,我们使用gethostname()方法来获取本地主机名,并将其用作服务器的主机地址。我们将端口号设置为5000,并使用bind()方法将套接字绑定到主机和端口。
接下来,我们使用listen()方法开始监听来自客户端的连接。然后,使用accept()方法在等待连接的位置等待客户端的连接。accept()方法返回一个新的套接字对象和一个客户端地址。
在连接建立后,我们使用一个无限循环来接收和发送数据。通过调用recv()方法接收客户端发送的数据,并使用encode()方法将数据从字节流转换为字符串。如果收到的数据为空,则跳出循环。
我们使用input()函数从控制台获取要发送给客户端的响应,并使用send()方法将响应发送给客户端。在发送之前,我们使用encode()方法将消息从字符串转换为字节流。
当循环结束时,我们调用close()方法关闭客户端连接。
下面是一个使用telnet命令与上述服务器进行交互的示例:
$ telnet localhost 5000 Trying ::1... Connection failed: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. -> Hello, server! 来自客户端的消息:Hello, server! -> Hi, client!
在上面的示例中,我们使用telnet命令连接到本地主机的5000端口。然后,我们输入Hello, server!并按下Enter键。这条消息发送给服务器并打印出来。然后,我们从控制台输入Hi, client!并按下Enter键。这条消息发送给客户端。
这是一个简单的网络服务器程序的示例,可以与客户端建立连接并发送接收数据。你可以根据需要扩展代码来处理不同的情况和功能。
