猫史档案馆


【Python作品分享】基于UDP协议的网络聊天室【作品秀】

用户:辣椒爆炒蔡徐坤辣椒爆炒蔡徐坤查看:40 回复:12 评论:40 创建时间:2019-10-26T16:49:27


【作品展示】

center_image

 

【作品介绍】

这是一个基于网络通信协议(UDP)完成的多线程版聊天室,由于结构复杂,如果网页端无法运行的话,请到海龟编辑器运行

注:本作品有可能会后续加入TkinterGUI窗口,且作品为雏形,只允许两个IP相互通信。

 

【作品源代码】


import socket
import threading


def recv_date(s):
    while True:

        udp_s = s.recvfrom(1024)
        print(udp_s)


def send_date(s, ip, port):
    while True:
        r = input("请输入要发送的数据:")
        s.sendto(r.encode("gbk"), (ip, port))


def main():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind(("", 7890))
    ip = input("请输入IP地址:")
    port = int(input("请输入端口:"))
    t_recv = threading.Thread(target=recv_date, args=(s,))
    t_send = threading.Thread(target=send_date, args=(s, ip, port))
    t_recv.start()
    t_send.start()


if __name__ == "__main__":
    main()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
QBZ_QBZ_

对方怎么接收到?

点赞0


评论


QBZ_QBZ_

socket是你自学的?

点赞0


评论


QBZ_QBZ_

# 机器人
def car_bot(in_msg):
    import random
    car_dict = {"奔驰":"真有钱","宝马":"牛!"} 
    if in_msg in cake_dict.keys():
        return cake_dict[in_msg]
    else:
        reply = ['你说什么?',
                 '你说得对!'
                 '是不是你哪里写错了?',
                 '好吧!',
                 '我叫小i,你呢?']
    return random.choice(reply)

import socket
print('This is sever_bot.')
local_addr= ('localhost', 20000) # 本地主机接受端口
# 创建socket对象,DGRAM方式,专门用于发送
ss= socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# socket对象绑定地址及端口
ss.bind(local_addr)

while 1:
    # 通过socket接收消息和地址
    reciveData, rec_addr = ss.recvfrom(1024)
    if reieveData:
        print("from:", rec_addr)
    #  通过socket向远程主机发消息
    echo = car_bot(reciveData.decode())
    ss.sendto(sendData.encode("utf-8"), remote_addr)
    
ss.close()

点赞0


评论


QBZ_QBZ_

#!/usr/bin/env python3

import socket
print('小i: 你好,我是小i,有什么可以帮您?')
local_addr = ('localhost',10000) # 本地主机发送端口
# 目标主机接受端口
remote_addr = ('喵)
# 创建socket对象,DGRAM方式,专门用于发送
ss = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# socket对象绑定地址及端口
ss.bind(local_addr)

while 1:
    sendData = input("发送:")
    if sendData == "quit":
        break
    #  通过socket向远程主机发消息
    ss.sendto(sendData.encode("utf-8"),remote_addr)
    reciveData,rec_addr = ss.recvfrom(1024)
    if reieveData:
        print("小i@",rec_addr)
ss.close()

点赞0


评论


QBZ_QBZ_

你没有远程主机

点赞0


评论


辣椒爆炒蔡徐坤辣椒爆炒蔡徐坤

UDP通信协议的客户端服务器没有划分的那么细

点赞0


评论


QBZ_QBZ_

center_image

点赞0


评论


辣椒爆炒蔡徐坤辣椒爆炒蔡徐坤

def car_bot(in_msg):
import random
car_dict = {"奔驰": "真有钱", "宝马": "牛!"}
if in_msg in car_dict.keys():
return car_dict[in_msg]
else:
reply = ['你说什么?',
'你说得对!'
'是不是你哪里写错了?',
'好吧!',
'我叫小i,你呢?']
return random.choice(reply)


import socket

print('This is sever_bot.')
local_addr = ('localhost', 20000) # 本地主机接受端口
# 创建socket对象,DGRAM方式,专门用于发送
ss = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# socket对象绑定地址及端口
ss.bind(local_addr)

while 1:
# 通过socket接收消息和地址
in_msg, rec_addr = ss.recvfrom(1024)
if in_msg:
print("from:", rec_addr)
# 通过socket向远程主机发消息
echo = car_bot(in_msg.decode())
ss.sendto("hahahhahahah".encode("utf-8"),("192.168.232.1",20000))

ss.close()

点赞0


评论


QBZ_QBZ_

center_image

点赞0


评论


辣椒爆炒蔡徐坤辣椒爆炒蔡徐坤

#服务器
import socket
import random
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("", 7890))
reply = ['11',
         '22'
         '33',
         'OK',
         'Are you?']
reply_randoms = random.choice(reply)
print("This is a server")
while 1:
    text,ip = s.recvfrom(1024)
    if text:
        print("from:",ip)
    s.sendto(reply_randoms.encode("gbk"),("192.168.232.1",8080))
s.close()

点赞0


评论


辣椒爆炒蔡徐坤辣椒爆炒蔡徐坤

#客户端
import socket
print('小i: 你好,我是小i,有什么可以帮您?')
ss = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
ss.bind(("",8080))
while 1:
    sendData = input("发送:")
    if sendData == "quit":
        break
    else:
        ss.sendto(sendData.encode("gbk"),("192.168.232.1",7890))
        se,sa = ss.recvfrom(1024)
        print(se,sa)

点赞0


评论


传闻中的三叶传闻中的三叶

好厉害的亚子

点赞0


评论