当前位置: 代码网 > it编程>前端脚本>Python > python网络编程tcp客户端及服务端解读

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

2025年01月21日 Python 我要评论
python网络编程tcp客户端及服务端python 的 socket 模块是用于网络编程的标准库,提供了低级别的网络接口,允许程序通过网络进行通信。以下是对 python socket 模块的简要介

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

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

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

基本概念

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

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

  • tcp:面向连接的协议,提供可靠的数据传输。
  • udp:无连接的协议,传输速度快,但不保证数据的可靠性。

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

常用功能

创建 socket

  • 使用 socket.socket() 创建一个新的 socket 对象。
  • 需要指定地址族(如 socket.af_inet 表示 ipv4)和套接字类型(如 socket.sock_stream 表示 tcp)。

绑定(bind)

  • 使用 bind() 方法将 socket 绑定到特定的 ip 地址和端口号。

监听(listen)

  • 服务器使用 listen() 方法开始监听传入的连接请求。

接受连接(accept)

  • 使用 accept() 方法接受客户端的连接请求,返回一个新的 socket 对象和客户端的地址。

连接(connect)

  • 客户端使用 connect() 方法连接到服务器。

发送和接收数据

  • 使用 send()sendall() 方法发送数据。
  • 使用 recv() 方法接收数据。

关闭 socket

  • 使用 close() 方法关闭 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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com