用python写一个聊天小程序(udp版)

本文介绍了如何使用Python的socket库创建一个简单的UDP聊天程序。首先,讲解了UDP的基础知识,然后详细阐述了socket的发送和接收过程,包括绑定端口、发送数据和接收数据的步骤。最后,给出了实现UDP收发功能的代码示例,以及用于测试的发送和接收程序。建议读者通过练习加深理解,TCP版本的聊天程序将在后续分享。
摘要由CSDN通过智能技术生成

1.UDP简介

    Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP)。UDP为应用程序提供了无需建立就可以发送封装的IP数据包的方法。

    Internet的传输层有两个协议,互为补充。无连接是UDP,它除了给应用程序发送数据包功能并允许他们所需的层次上架构自己的协议之外,几乎没有做什么特别的事情。面向连接的是TCP,该协议几乎做了所有的事情。

    中文名:用户数据协议

    外文名:User Datagram Protocol

    特点:无连接、不可靠、快速传输

    基础:IP数据包服务上增加一点功能

    类别:传输层协议

    用途:发送数据包

2.socket

    一般socket我们称为套接字,并且在Python中有socket这个库(可以使用pip命令自行下载pip install socket)。下面来说一下socket的简单流程:

1. 获取套接字
2. 绑定端口
3. 选择发送或者接受
4. 关闭套接字

2-1 socket的发送

socket的发送很简单,下面是一般的最简代码:

# -*- coding: utf-8 -*-
import socket


def sendMsg():
    # 获取套接字
    send_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 为套接字绑定端口与ip
    # 这里的""是表示当前绑定的ip为本机的ip,后面的数字为该程序所绑定的端口号。
    # 如果不提前绑定端口号,则可能发送的时候,有电脑自动为该程序分发一个端口号。
    send_socket.bind(("", 7879))  # 当然这个端口也可以是7878,即发送的端口,后续会继续讲解 

    # 设置发送
    send_socket.sendto(b"123", ("127.0.0.1", 7878))

    # 关闭套接字
    send_socket.close()


if __name__ == '__main__':
    sendMsg()

2-2 socket的接收

    注意,在recv中,一定需要提前绑定端口,因为这是接收消息的前提条件,那么选用什么端口呢?一般做实验或者写程序的时候,我们可以选择的端口范围在[1024-65535]之间。因为上面已经创建了socket的发送,并且选定了端口号为7878,那么我们此时的端口只需要绑定7878即可。

    recv_socket.recvfrom(1024)表示单次接受的最大字节为1024,如果超出这个数值,那么只取前面的1024个。并且该函数返回的值是一个元组,与socket发送时一致(b"123", ("127.0.0.1", 7878)),因此在想要获取接受的内容是,需要利用下标索引。这里还需要注意一点,因为我们在传输的时候是靠字节去传输的,因此获取到的也是字节,我们需要为它进行编码,但是win系统与linux系统是不相同的,win系统默认的是gbk编码,但是linux默认的是utf-8编码,因此在获取字节之后,需要根据系统的类型选择相应的解码格式。

# -*- coding: utf-8 -*-
import socket


def recvMsg(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值