首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用于创建python服务器和客户端的python库,这些服务器和客户端也可以在本地python类型的端口上处理数据传输

在 Python 中,有多种库可以用于创建服务器和客户端,以便在本地端口上处理数据传输。以下是一些常用的库和示例代码:

1. socket

socket 库是 Python 标准库的一部分,用于低级别的网络通信。它可以用于创建 TCP 和 UDP 服务器和客户端。

示例:TCP 服务器和客户端

服务器代码:

代码语言:javascript
复制
import socket

def start_server(host='127.0.0.1', port=65432):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind((host, port))
        s.listen()
        print(f'Server listening on {host}:{port}')
        conn, addr = s.accept()
        with conn:
            print(f'Connected by {addr}')
            while True:
                data = conn.recv(1024)
                if not data:
                    break
                print(f'Received: {data.decode()}')
                conn.sendall(data)

if __name__ == "__main__":
    start_server()

客户端代码:

代码语言:javascript
复制
import socket

def start_client(host='127.0.0.1', port=65432):
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.connect((host, port))
        s.sendall(b'Hello, server')
        data = s.recv(1024)
        print(f'Received: {data.decode()}')

if __name__ == "__main__":
    start_client()

2. asyncio

asyncio 库用于编写异步网络代码。它可以用于创建高效的异步服务器和客户端。

示例:异步 TCP 服务器和客户端

服务器代码:

代码语言:javascript
复制
import asyncio

async def handle_client(reader, writer):
    addr = writer.get_extra_info('peername')
    print(f'Connected by {addr}')
    while True:
        data = await reader.read(100)
        if not data:
            break
        print(f'Received: {data.decode()}')
        writer.write(data)
        await writer.drain()
    writer.close()
    await writer.wait_closed()

async def start_server(host='127.0.0.1', port=65432):
    server = await asyncio.start_server(handle_client, host, port)
    addr = server.sockets[0].getsockname()
    print(f'Server listening on {addr}')
    async with server:
        await server.serve_forever()

if __name__ == "__main__":
    asyncio.run(start_server())

客户端代码:

代码语言:javascript
复制
import asyncio

async def start_client(host='127.0.0.1', port=65432):
    reader, writer = await asyncio.open_connection(host, port)
    writer.write(b'Hello, server')
    await writer.drain()
    data = await reader.read(100)
    print(f'Received: {data.decode()}')
    writer.close()
    await writer.wait_closed()

if __name__ == "__main__":
    asyncio.run(start_client())

3. http.serverrequests

如果您需要处理 HTTP 请求,可以使用 http.server 库创建一个简单的 HTTP 服务器,并使用 requests 库创建客户端。

示例:HTTP 服务器和客户端

服务器代码:

代码语言:javascript
复制
from http.server import BaseHTTPRequestHandler, HTTPServer

class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/plain')
        self.end_headers()
        self.wfile.write(b'Hello, client')

def start_server(host='127.0.0.1', port=8000):
    server = HTTPServer((host, port), SimpleHTTPRequestHandler)
    print(f'Server listening on {host}:{port}')
    server.serve_forever()

if __name__ == "__main__":
    start_server()

客户端代码:

代码语言:javascript
复制
import requests

def start_client(url='http://127.0.0.1:8000'):
    response = requests.get(url)
    print(f'Received: {response.text}')

if __name__ == "__main__":
    start_client()
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • radius认证服务器ip该怎么填_radius认证服务器拒绝原因

    大家好,又见面了,我是你们的朋友全栈君。 1. AAA和Radius概述   AAA是验证授权和记账Authentication,Authorization,and Accounting 的简称。它是运行于NAS上的客户端程序,它提供了一个用来对验证、授权和记账这三种安全功能进行配置的一致的框架。AAA的配置实际上是对网络安全的一种管理,这里的网络安全主要指访问控制,包括哪些用户可以访问网络服务器,具有访问权的用户可以得到哪些服务,如何对正在使用网络资源的用户进行记账。下面简单介绍一下验证, 授权,记账的作用。   · 验证(Authentication): 验证用户是否可以获得访问权可以选择使用RADIUS协议   · 授权(Authorization) : 授权用户可以使用哪些服务   · 记账(Accounting) : 记录用户使用网络资源的情况   · AAA的实现可采用RADIUS 协议RADIUS 是Remote Authentication Dial In User Service 的简称原来的初衷是用来管理使用串口和调制解调器的大量分散用户。现在已经远不止这些应用了

    03

    Socket 编程原理

    socket编程即计算机网络编程,目的是使两台主机能够进行远程连接,既然要使两者产生联系,那么就要有至少一个信息发送端和一个信息接收端,因此形成了现在绝大多数 socket 编程都会用到的 C/S 架构(Client[客户端]/Server[服务端]),最典型的应用就是 web服务器/客户端。 在 Unix/Linux 中执行任何形式的 I/O 操作(比如网络连接)时,都是在读取或写入一个文件描述符,而在 Windows 中则被称为文件句柄,其本质都是一个东西,但是 Windows系统会把 socket 当成一个网络连接,需要调用专门设计的数据传输函数。 socket (套接字)是一种抽象层,程序通过它来收发数据,就像打开一个句柄将数据写在存储器上一样,使用 socket 能将程序放在网络中,并与同一网络下其他计算机进行通信。 现在问题又来了,主机内部应用间进行通信,不同应用可用进程号作为唯一标识,那么在网络间通信用什么作为唯一标识呢?其实 TCP/IP 协议簇已经解决了问题,在网络层 IP 地址可以用作网络中主机的唯一标识,传输层的”协议+端口”可用作主机应用的唯一标识,因此利用三元组(IP地址、协议、端口)就可以标识网络应用了,网络应用间可以用三元组作为标志和其他应用进行交互,socket 通信大致如下:

    06
    领券