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

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

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

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

基于TCP协议的socket编程

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

import socket

from socket import AF_INET
# socket.socket() # AF_INET, type=SOCK_STREAM: 基于TCP协议的

server=socket.socket(family=AF_INET, type=socket.SOCK_STREAM) # AF_INET, type=SOCK_DGRAM: 基于UDP协议的

# 绑定IP地址和port
server.bind(('127.0.0.1', 8000))

# 服务端做监听,也称为是半链接池(服务端能够同时等待客户端的数量)
server.listen(3)

while True:
    # 该接收客户端发来的消息
    sock, addr = server.accept() #  """我们知道代码运行到这里,就会卡主,等待客户端开发链接和发送消息"""
    """sock:当前链接的客户端的链接, addr:就是客户端的地址:ip,port"""

    while True:
        # 想拿到客户端实际发过来的数据
        try:
            """客户端发送过来的数据是个空,或者"""
            data=sock.recv(1024) # 接收的数据类型是bytes类型,二进制的 1024 代表接收的最多的字节数
            print("接收客户端的数据:",data)
            # 要给客户端返回一个数据
            sock.send(data.upper()) # 发送的数据是字节类型的
        except Exception as e:
            print(e)
            break
    # 关闭链接
    sock.close()

server.close()

客户端代码(client.py):

import socket

from socket import AF_INET

client=socket.socket(family=AF_INET, type=socket.SOCK_STREAM)
# socket.socket()

client.connect(('127.0.0.1', 8000))

while True:
    send_data = input('请输入你要发送给服务端的数据:')

    # 开始给服务端发送消息
    client.send(send_data.encode('utf-8'))

    # 接收服务端发来的消息
    data=client.recv(1024)
    print("服务端发来的消息:", data)

client.close()

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

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

基于UDP协议的socket编程

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

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

"""客户端"""

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # 数据报协议-》UDP

while True:
    msg = input('>>: ').strip()  # msg=''
    client.sendto(msg.encode('utf-8'), ('127.0.0.1', 8080))
    data, server_addr = client.recvfrom(1024)
    print(data)

client.close()


"""服务端"""

import socket

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # 数据报协议-》UDP
server.bind(('127.0.0.1', 8080))

while True:
    """client_addr: 客户端的地址"""
    data, client_addr = server.recvfrom(1024) # 接收的最大字节数
    print('===>', data, client_addr)
    server.sendto(data.upper(), client_addr)

server.close()

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值