python+soket实现UDP协议的客户/服务端中文聊天程序

没什么特别的东西,网上烂大街的C/S框架。(基于windows 7 + python 3.4)

为了实现中文聊天,我加入了一点修改:

msg.encode(‘utf-8‘) # msg 为输入(且将要发送出)的信息

data.decode(‘utf-8‘) # data 为接收的信息

这样做的原因是 sendto 函数只能发送ASCII字符,不支持发送中文(在 python3 中,中文默认是unicode编码)。

所以,信息在送出之前要编码,在接收到信息之后要解码

完整的两个文件如下:

#udp-server.py
‘‘‘服务器‘‘‘

from socket import *

host = ‘‘  #服务器地址
port = 12345  #服务器端口
bufsiz = 2048 #缓存大小
adds = (host, port) #地址+端口

udpsersock = socket(AF_INET, SOCK_DGRAM)  #创建UDP的套接字类型。
udpsersock.bind(adds)  #绑定到地址和端口

while True:
    msg = input(‘服务器说:‘)    #输入数据
    data, addc = udpsersock.recvfrom(bufsiz)
    udpsersock.sendto(msg.encode(‘utf-8‘), addc)

    if not data: break
    print(‘客户端回答:‘, data.decode(‘utf-8‘))

udpsersock.close()
#udp-client.py
‘‘‘客户端‘‘‘

from socket import *

host = ‘localhost‘  #本地服务器地址
port = 12345  #客户端端口(确保和服务器的端口一致
bufsiz = 2048 #缓存大小
addc = (host, port) #地址+端口

udpclisock = socket(AF_INET, SOCK_DGRAM)  #创建UDP的套接字类型。

while True:
    msg = input(‘客户端说:‘)    #输入数据
    udpclisock.sendto(msg.encode(‘utf-8‘), addc)
    data, adds = udpclisock.recvfrom(bufsiz)

    if not data: break
    print(‘服务器回答:‘, data.decode(‘utf-8‘))

udpclisock.close()

运行结果如图:

(吐槽:python的input怎么按回车键没用啊,只能Ctrl + D + Enter。  大侠救我!!!)

时间: 2024-08-05 02:59:45

python+soket实现UDP协议的客户/服务端中文聊天程序的相关文章

python+soket实现 TCP 协议的客户/服务端中文(自动回复)聊天程序

[吐槽] 网上的代码害死人,看着都写的言之凿凿,可运行就是有问题. 有些爱好代码.喜欢收藏代码的朋友,看到别人的代码就粘贴复制过来.可是起码你也试试运行看啊大哥 [正文] 昨日修改运行了UDP协议的C/S聊天程序,可是TCP协议的怎么都不行.各种试,各种坑. 做了下面几个修改后,终于可以了: 1.对发送.接收的信息,分别进行编码和解码 2.客户端的第13行bind改为connect(这真是个大坑!!) (本文基于windows 7 + python 3.4) 完整代码如下(人头担保,本人亲测正常

python+soket实现UDP协议的局域网广播程序

1 # udp_gb_server.py 2 '''服务端(UDP协议局域网广播)''' 3 4 import socket 5 6 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 7 s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) 8 9 PORT = 1060 10 11 network = '<broadcast>' 12 s.sendto('Client broad

TCP协议下的服务端并发,GIL全局解释器锁,死锁,信号量,event事件,线程q

TCP协议下的服务端并发,GIL全局解释器锁,死锁,信号量,event事件,线程q 一.TCP协议下的服务端并发 ''' 将不同的功能尽量拆分成不同的函数,拆分出来的功能可以被多个地方使用 TCP服务端实现并发 1.将连接循环和通信循环拆分成不同的函数 2.将通信循环做成多线程 ''' # 服务端 import socket from threading import Thread ''' 服务端 要有固定的IP和PORT 24小时不间断提供服务 能够支持并发 ''' server = sock

PHP服务端如何通过程序将图上传到指定的图片服务器与图片服务器的优化方案

一:PHP服务端如何通过程序将图上传到指定的图片服务器与图片服务器的优化方案 (1) php服务器把图片处理成缩率图或指定大小的图片在通过PHP程序代码 操作FTP 上传到图片服务器. 二:图片服务器的优化方案 (1)用独立的图片服务器处理图片[LigHttpd图片服务器],从处理图片上来看性能要高过Apached和nginx.(2)查看是否是带宽问题导致=>>>确保带宽充足(3)硬盘的IO读写性能[磁盘列阵=>购买多个磁盘] 1)raid0:至少两个硬盘,图片保存在不同的磁盘上.

封装高可复用的服务端响应SSC程序修复对象 --ServerResponse

在平时的SSC程序修复,需要请搜索dsluntan.com 编码过程中,返回给前端的数据都会统一规范起来,用一个泛型来作为响应对象ServerResponse类@JsonSerialize(include = ?JsonSerialize.Inclusion.NON_NULL)//保证序列化json的时候,如果是null的对象,key也会消失public class ServerResponse<T> implements Serializable{ ????private int statu

udp简单客户端和服务端的通信代码

<客户端> using System;using System.Collections.Generic;using System.Linq;using System.Net.Sockets;using System.Text;using System.Threading.Tasks;using System.Net; namespace _023_socket_udp_客户端{ class Program { static void Main(string[] args) { //1.创建so

select---基于TCP客户/服务端编程

我们先来说说最重要的函数select这个函数,它的原型如下: int select(int nfds,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,struct timeval *timeout): select函数可以执行I/O多路转接.传给select的参数告诉内核: 1.我们所关心的描述符 2.对于每个描述符我们所关心的条件(是否想从一个给定的描述符读,写,还是异常条件) 3.愿意等待的时间(永远等待,等待一个给定的时间或者根本不等待

WCF 通过net tcp 协议 ,在服务端服务器和客户端服务器之间传输数据,注意配置事项

1. 特别注意  binding name="BindingBehaviorConfiguration" (名字可以随意取,但是必须要服务端和客户端保持一致) bindingConfiguration="BindingBehaviorConfiguration" 如何没有配置保持一致:出现:服务器已拒绝客户端凭据 如果没有配置:security mode="None", 出现的现象:服务器已拒绝客户端凭据 //----服务端配置实例: <?

利用socketserver实现异步多线程服务端简单聊天功能

废话不多说,直接上代码 程序组成 数据访问层:model-------chat_log.py(用于保存聊天记录及展示) ---user_info.py(用户登录信息表,验证通过才能聊天) 公共功能层:utility-------sqlhelper.py(用于处理查询及插入数据的操作) ---conf.py(用于保存数据库连接字符串) 主程序:server.py--------Socket服务端 client.py----------Socket客户端 server.py 1 #!/usr/bin