《LearnPython-Python学习笔记》-PythonTCP接收/发送信息

admin 2025-11-07 01:03:17 编程 来源:ZONE.CI 全球网 0 阅读模式
  • 现在客户端有了,服务端也有了,那我们完善一下代码
  • 1.完善服务端代码:

    一 简单介绍一下几个知识点TCP: 他是 传输控制协议 是 是一种面向连接的、基于字节流的传输层通信协议 . 这种连接是一对一的,因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议。socket: 套接字,是一个模块,我们用它来完成收发信息网路协议版本: IPV4 和 ipv6 , 因为后者还没有推广开,所有现在普遍还是用的IPV4版本.ip,和端口 :要给谁发送,就写谁的ip(这里就写自己本地ip就行要是不知道就打开cmd输入ipconfig查看) ; 端口号就随便用一个(除知名端口)encode:就是编码,把字符串转换成字节,因为sendto方法的格式.(反之decode就是解码)二 tcp发送数据(TCP客户端)客户端 就是要向 服务端 发数据 所以比较好理解简单说一下步骤:

    1. 导入socket模块
    2. 创建TCP套接字
    3. 建立连接(与服务端)
    4. 发数据
    5. 关闭套接字

    看代码:

    1. # 1导包
    2. import socket
    3. # 2初始化套接字
    4. tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    5. # 3建立链接 要传入链接的服务器ip和port
    6. tcp_socket.connect(('192.168.52.1', 11000))
    7. # 4发数据
    8. tcp_socket.send('哈哈呵呵呵'.encode())
    9. # 5断开
    10. tcp_socket.close()

    这里有网络调试助手点击下载 , 用于测试

    三 tcp接收信息(TCP服务器):有了发送数据的客户端,现在创建一个接收信息的服务器简单来说有六个步骤

    1. 导入socket模块
    2. 创建TCP套接字
    3. 绑定ip和port
    4. 设置为被动监听模式 最大并发接收的数量是128(设置监听模式才能是服务器)
    5. 等待接收链接请求 接收到的是一个元组 (客户端的socket对象包含了:(客户端的地址,端口))
    6. 关闭套接字

    下面直接看代码: ↓ (因为ip的问题,测试时把WiFi关掉)

    1. # 导包
    2. import socket
    3. # 2初始化套接字
    4. tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    5. # 3 服务器绑定ip和port
    6. tcp_socket.bind(('192.168.52.1', 12000))
    7. # 4 设置为被动监听模式 最大并发接收的数量是128
    8. tcp_socket.listen(128)
    9. # 5 等待接收链接请求 接收到一个元组 (客户端的socket对象,(客户端的地址,端口))
    10. client, addr = tcp_socket.accept()
    11. # 接收要用客户端的socket对象接收,因为发的时候就是用他的对象发的
    12. data = client.recv(1024)
    13. # 发送的格式是字节,要解码,decode()默认gbk
    14. print(data.decode())
    15. # 6断开
    16. tcp_socket.close()

    现在客户端有了,服务端也有了,那我们完善一下代码

    1.完善服务端代码:

    先说服务端的,不能只接收一次数据程序就结束了,所以加个循环,一直接受

    1. import socket
    2. # 1初始化套接字
    3. tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    4. # 设置地址可以复用,解决了 端口没有及时释放的问题
    5. tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    6. # 2 服务器绑定ip和port
    7. tcp_socket.bind(('192.168.52.1', 12000))
    8. # 3 设置为被动监听模式 最大并发接收的数量是128
    9. tcp_socket.listen(128)
    10. while True:
    11. # 4 等待接收链接请求 接收到一个元组 (客户端的socket对象,(客户端的地址,端口))
    12. client, addr = tcp_socket.accept()
    13. print('client:', client)
    14. print('addr:', addr)
    15. while True:
    16. data = client.recv(1024)
    17. print(data.decode('gbk'))
    18. if not data:
    19. # 如果数据为空 说明客户端关闭了链接 这里的client也就可以关闭
    20. client.close()
    21. break
    22. # 5断开
    23. tcp_socket.close()

    说一下 : 服务器接收到的client是 (客户端发过来的:客户端套接字对象) , 那既然是客户用这个套接字对象发送,我们也用这个套接字对象去回复 . 试想一下,如果同时有多个客户端发过来连接请求 , 那我们是和谁连接呢 ? 好比方说 : 小A已经和我的服务器连接了, 那我现在程序向下运行,处理数据 , 此时小B尝试连接肯定连不上了!(服务器已经不接收连接请求了)这种情况 也是可以解决的的,因为他是对每个发过来的socket(客户端对象)进行处理.(这里就像是很多人打人工客服,他会内部给你分配一个客服和你沟通) 有兴趣可以扩展看一下小案例: TCP 聊天室

    2.完善客户端代码:客户端用socket对象发送数据 也可以用socket接受数据(因为服务器端接收数据的时候 , 就是用客户端的socket对象接收的呀)

    1. import socket
    2. # 1初始化套接字
    3. tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    4. # 2建立链接 要传入链接的服务器ip和port
    5. tcp_socket.connect(('192.168.52.1', 11000))
    6. while True:
    7. text = input('发送的数据')
    8. # 3发数据
    9. tcp_socket.send(text.encode('gbk'))
    10. # 4接收数据
    11. data = tcp_socket.recv(1024)
    12. print(data.decode('gbk'))
    13. # 5断开
    14. tcp_socket.close()

    测试时注意编码格式,和地址问题,端口问题,这些都是不一样的根据自己情况最后结尾了,说一下TCP 和 UDP 的不同点:

    1. 面向连接(确认有创建三方交握,连接已创建才作传输。)
    2. 有序数据传输
    3. 重发丢失的数据包
    4. 舍弃重复的数据包
    5. 无差错的数据传输
    6. 阻塞/流量控制

    https://blog.csdn.net/qq_43665891/article/details/104209387

    以太坊cppgolang区别 编程

    以太坊cppgolang区别

    以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
    progolang 编程

    progolang

    Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
    golangn个发送者 编程

    golangn个发送者

    Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
    golang技能图谱 编程

    golang技能图谱

    从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
    评论:0   参与:  0