• 基于TCP/UDP协议的Socket编程方法


            Socket是一种在计算机之间进行网络通信的方式,它提供了一个标准的网络通信接口,可以使不同操作系统和编程语言之间的应用程序进行通信。

            在Python中,我们可以使用socket模块来创建Socket对象,通过套接字(Socket)来进行网络通信。

            以下是一个简单的Socket编程示例,展示如何通过Socket实现一个简单的客户端-服务器通信程序:

    基于TCP协议的socket编程

    服务器端代码(server.py):

    1. import socket
    2. from socket import AF_INET
    3. # socket.socket() # AF_INET, type=SOCK_STREAM: 基于TCP协议的
    4. server=socket.socket(family=AF_INET, type=socket.SOCK_STREAM) # AF_INET, type=SOCK_DGRAM: 基于UDP协议的
    5. # 绑定IP地址和port
    6. server.bind(('127.0.0.1', 8000))
    7. # 服务端做监听,也称为是半链接池(服务端能够同时等待客户端的数量)
    8. server.listen(3)
    9. while True:
    10. # 该接收客户端发来的消息
    11. sock, addr = server.accept() # """我们知道代码运行到这里,就会卡主,等待客户端开发链接和发送消息"""
    12. """sock:当前链接的客户端的链接, addr:就是客户端的地址:ip,port"""
    13. while True:
    14. # 想拿到客户端实际发过来的数据
    15. try:
    16. """客户端发送过来的数据是个空,或者"""
    17. data=sock.recv(1024) # 接收的数据类型是bytes类型,二进制的 1024 代表接收的最多的字节数
    18. print("接收客户端的数据:",data)
    19. # 要给客户端返回一个数据
    20. sock.send(data.upper()) # 发送的数据是字节类型的
    21. except Exception as e:
    22. print(e)
    23. break
    24. # 关闭链接
    25. sock.close()
    26. server.close()

    客户端代码(client.py):

    1. import socket
    2. from socket import AF_INET
    3. client=socket.socket(family=AF_INET, type=socket.SOCK_STREAM)
    4. # socket.socket()
    5. client.connect(('127.0.0.1', 8000))
    6. while True:
    7. send_data = input('请输入你要发送给服务端的数据:')
    8. # 开始给服务端发送消息
    9. client.send(send_data.encode('utf-8'))
    10. # 接收服务端发来的消息
    11. data=client.recv(1024)
    12. print("服务端发来的消息:", data)
    13. client.close()

            此示例中,我们创建了一个简单的TCP/IP服务器和客户端来演示Socket编程的基本原理。服务器绑定到本地主机上的指定端口并等待来自客户端的连接请求。一旦连接建立,服务器收到客户端发送的数据并将其发送回去,直到连接关闭。客户端连接到服务器并发送一个简单的消息,等待并显示响应。

            这只是Socket编程的一个基本示例,Socket提供了许多功能和选项,可用于更复杂的网络通信和应用程序。

    基于UDP协议的socket编程

            UDP协议是一种面向无连接的传输协议,与TCP协议不同,UDP协议不需要在传输过程中建立连接并且不需要保证数据的可靠性。因此,在进行基于UDP协议的socket编程时,需要注意数据的可靠性和完整性。

    以下是一个简单的基于UDP协议的socket程序,可以通过Python语言实现:

    1. """客户端"""
    2. import socket
    3. client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议-》UDP
    4. while True:
    5. msg = input('>>: ').strip() # msg=''
    6. client.sendto(msg.encode('utf-8'), ('127.0.0.1', 8080))
    7. data, server_addr = client.recvfrom(1024)
    8. print(data)
    9. client.close()
    10. """服务端"""
    11. import socket
    12. server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议-》UDP
    13. server.bind(('127.0.0.1', 8080))
    14. while True:
    15. """client_addr: 客户端的地址"""
    16. data, client_addr = server.recvfrom(1024) # 接收的最大字节数
    17. print('===>', data, client_addr)
    18. server.sendto(data.upper(), client_addr)
    19. server.close()

            在上面的程序中,我们使用socket库中的socket函数创建一个UDP协议的socket对象。然后,使用bind方法将socket对象绑定到本地IP地址和端口号。接着,使用recvfrom方法接收来自发送方的数据,并获取发送方的IP地址和端口号。程序将接收到的数据和发送方的信息打印出来。

            随后,程序使用sendto方法向发送方发送数据,并使用发送方的IP地址和端口号作为目标地址。最后,使用close方法关闭socket对象。

            需要注意的是,在进行UDP协议的socket编程时,无法保证数据的可靠性和完整性,因此需要在程序设计时对数据的传输进行一定的处理和限制。

  • 相关阅读:
    TIA博途中已经被调用的变量,为什么交叉引用时却没有显示调用信息?
    云原生超融合八大核心能力|ZStack Edge云原生超融合产品技术解读
    金仓数据库KingbaseES客户端编程接口指南-ado.net(8. 事务)
    字符串常用方法,想要的这儿都有
    【Android进阶】9、用 RecyclerView 显示列表
    netty系列之:HashedWheelTimer一种定时器的高效实现
    一篇文章讲清Servlet原理
    Java项目调用Python脚本(基于idea)
    什么是 CI/CD? | 实现更快更好的软件交付
    漏洞复现--安恒明御安全网关文件上传
  • 原文地址:https://blog.csdn.net/qq_38104453/article/details/133859296