python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python tcp客户端及服务端

python网络编程tcp客户端及服务端解读

作者:Bojaka

Python的socket模块提供了基本的网络通信功能,包括创建socket对象、绑定地址、监听连接、接受连接、发送和接收数据以及关闭连接等,TCP和UDP是常用的网络协议,IP地址和端口号用于标识通信端点,通过这些功能,可以实现客户端和服务器之间的网络通信

python网络编程tcp客户端及服务端

Python 的 socket 模块是用于网络编程的标准库,提供了低级别的网络接口,允许程序通过网络进行通信。

以下是对 Python socket 模块的简要介绍,包括其基本概念、常用功能和示例。

基本概念

Socket:Socket 是网络通信的端点。它可以是一个客户端或服务器,允许在网络上发送和接收数据。

协议socket 模块支持多种网络协议,最常用的是 TCP(传输控制协议)和 UDP(用户数据报协议)。

IP 地址和端口:每个 socket 都与一个 IP 地址和一个端口号相关联。IP 地址标识网络上的设备,端口号标识设备上的特定服务。

常用功能

创建 Socket

绑定(Bind)

监听(Listen)

接受连接(Accept)

连接(Connect)

发送和接收数据

关闭 Socket

tcp客户端

import socket
target_host = "127.0.0.1"
target_port = 65423
# 创建客户端套接字
# socket.AF_INET:表示选择IPv4的地址,socket.SOCK_STREAM:表示TCP传输协议类型
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#连接客户端 connect the client
client.connect((target_host,target_port))
#使用GET方法发送数据
message = "hello,socker"
client.sendall(message.encode())

#返回数据最大字符为4096
response = client.recv(4096)

#打印返回数据
print(response.decode())

#关闭连接

client.close()

tcp服务端

import socket
import threading

IP = "0.0.0.0"
PORT = 65423

def main():
    # 创建客户端套接字对象
    # socket.AF_INET:表示选择IPv4的地址,socket.SOCK_STREAM:表示TCP传输协议类型
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 绑定PORT和IP
    server.bind((IP, PORT))
    # 设置客户端最大连接数量5
    server.listen(5)
    # 打印开启监听IP和PORT
    print(f" [*] Listening on {IP}:{PORT}")

    # 建立连接
    # 让服务器进入主循环中,并在该循环中等待外来连接
    while True:
        client, address = server.accept()
        # 打印已接受的客户端连接的ip和端口
        print(f"[*] Accepted connection from {address[0]}:{address[1]}")
        # 创建一个新的线程client_handler,用于处理与该客户端的通信
        client_handler = threading.Thread(target=handle_client, args=(client,))
        # 启动线程开始处理客户端请求
        client_handler.start()

# 定义处理客户端请求的函数handle_client,接受一个客户端套接字作为参数
def handle_client(client_socket):
    # 使用with语句确保在处理完客户端请求后自动关闭套接字
    with client_socket as sock:
    # 从客户端最多接受1024字节的数据
        request = sock.recv(1024)
    # 打印接收到的请求内容,使用decode("utf-8")将字节数据解码为字符串
        print(f"[*] Received: {request.decode('utf-8')}")  # 修正引号问题
    # 向客户端发送确认消息ACK,表示已经接收到请求
        sock.send(b"ACK")

if __name__ == "__main__":
    main()

使用编写的tcp客户端给服务发送几个测试的数据包,应该会看到以下输出

[*] Listening on 0.0.0.0:65423
[*] Accepted connection from 127.0.0.1:63382
[*] Received: hello,socker

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文