欢迎访问宙启技术站
智能推送

使用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键。这条消息发送给客户端。

这是一个简单的网络服务器程序的示例,可以与客户端建立连接并发送接收数据。你可以根据需要扩展代码来处理不同的情况和功能。