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

使用Python编写一个TCP/IP服务器

发布时间:2023-12-27 13:08:44

下面是一个使用Python编写的TCP/IP服务器的例子:

import socket

def main():
    # 创建一个TCP/IP的套接字
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 绑定服务器地址和端口号
    server_address = ('localhost', 8888)
    server_socket.bind(server_address)

    # 开始监听客户端的连接
    server_socket.listen(5)
    print('Server is listening on {}:{}'.format(*server_address))

    try:
        while True:
            # 等待客户端连接
            print('Waiting for a client connection...')
            client_socket, client_address = server_socket.accept()
            print('Accepted connection from {}:{}'.format(*client_address))

            try:
                while True:
                    # 从客户端接收数据
                    data = client_socket.recv(1024).decode('utf-8')
                    print('Received data from client: {}'.format(data))

                    if data:
                        # 向客户端发送响应数据
                        response = 'Hello, client!'
                        client_socket.sendall(response.encode('utf-8'))
                    else:
                        # 如果客户端断开连接,则跳出循环
                        break

            finally:
                # 关闭客户端连接
                client_socket.close()
                print('Connection with {} closed'.format(client_address))

    finally:
        # 关闭服务器套接字
        server_socket.close()

if __name__ == '__main__':
    main()

这个例子中,我们首先导入了socket模块,这个模块提供了底层的网络通信接口。然后我们定义了一个main函数作为程序的入口。

main函数中,我们创建了一个TCP/IP套接字,并且使用bind方法绑定了服务器的地址和端口号。然后我们调用listen方法开始监听客户端的连接。

在一个无限循环中,我们使用accept方法等待客户端的连接。一旦一个客户端连接上,我们就会获得客户端的套接字和地址。然后我们使用一个内部的循环来接收和发送数据。

在接收数据之后,我们打印出接收到的数据,并且向客户端发送一个简单的响应。如果接收到的数据为空,表示客户端断开连接,我们就会跳出内部的循环。

最后,在外部的循环结束后,我们关闭服务器套接字。

你可以使用这个例子来创建一个TCP/IP服务器。只需在终端运行这个脚本,它会在本地的8888端口上监听客户端的连接,并向客户端发送响应。你可以使用Telnet或其他TCP/IP客户端工具来连接这个服务器,然后发送数据,接收服务器的响应。