使用python编写一个简易的聊天室

  最近在B站(https://www.bilibili.com/video/BV1Xx411R743?p=1)学习了socket,为了练习,使用socket编写了一个简易的聊天室功能

在这里插入图片描述
首先要创建两个udp套接字并绑定IP以及端口号,一个用于发送,一个用于接收

# 创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定ip以及端口
udp_socket.bind(("", 8077)) # 前一项为空字符串默认为本地ip,后一项为端口号可以在1024-65535之间任取,若程序提示端口号被占用,就换一个
udp_socket1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket1.bind(("", 9099))

其中socket.AF_INET表示使用的ipv4版本的ip,socket.SOCL_DGRAM表示使用的是udp协议
然后编写收发数据功能

class myThread1(threading.Thread):# 发送数据
    def run(self):
        while True:
            msg = input()
            ip = "127.0.0.1"# 目的ip
            port = 8080# 目的程序
            udp_socket.sendto(msg.encode("utf-8"), (ip, port))
class lmyThread(threading.Thread):# 收数据
    def run(self):
        while True:
            recv_data = udp_socket1.recvfrom(1024)
            ip = recv_data[1]
            msg = recv_data[0].decode("gbk")
            print(">>>%s: %s" % (str(ip), msg))

通过继承Thread的类来实现,是为了实现两个线程,收发数据两不相干
最终版本代码:

import  socket
import threading
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 绑定端口
udp_socket.bind(("", 8077))
udp_socket1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket1.bind(("", 9099))

class myThread1(threading.Thread):
    def run(self):
        while True:
            msg = input()
            ip = "127.0.0.1"
            port = 8080
            udp_socket.sendto(msg.encode("utf-8"), (ip, port))
class lmyThread(threading.Thread):
    def run(self):
        while True:
            recv_data = udp_socket1.recvfrom(1024)
            ip = recv_data[1]
            msg = recv_data[0].decode("gbk")
            print(">>>%s: %s" % (str(ip), msg))



t1=myThread1()
t2=lmyThread()
t1.start()
t2.start()
t1.join()
t2.join()

如果你编写两个这样的程序或者安装一个网络助手就可以与自己对话了
初学python的小白,若有不当,请不吝指教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值