5 多线程 模拟qq聊天
1.多线程思路
- 使用多线程完成一个全双工的QQ聊天程序


2.版本1:程序小框架
#1.收数据,然后打印
def recvData():
pass #2.检测键盘,发数据
def sendData():
pass def main():
pass if __name__ == "__main__":
main()

3.版本:2:该程序框架,多线程

from threading import Thread #1.收数据,然后打印
def recvData():
while True:
recvInfo = udpSocket.recvfrom(1024)
print(">>%s:%s"%(recvInfo[1],recvInfo[0])) #2.检测键盘,发数据
def sendData():
while True:
sendInfo = input("<< ")
udpSocket.sendto(sendInfo.encode("gb2312"),(xxx_ip,xxx_port)) def main():
tr = Thread(target=recvData)
ts = Thread(target=sendData) tr.start()
ts.start() tr.join()
ts.join() if __name__ == "__main__":
main()
4.版本3:socket套接字
- udpSocket = None (对象)
- udpSocket = “”(字符串)
- udpSocket = 0 (数字)
from threading import Thread
from socket import *
#1.收数据,然后打印
def recvData():
while True:
recvInfo = udpSocket.recvfrom(1024)
print(">>%s:%s"%(recvInfo[1],recvInfo[0])) #2.检测键盘,发数据
def sendData():
while True:
sendInfo = input("<< ")
udpSocket.sendto(sendInfo.encode("gb2312"),(destIp,destPort)) udpSocket = None
destIp = ""
destPort = 0 def main():
global udpSocket
global destIp
global destPort destIp = input("对方的ip:")
destPort = int(input("对方的port:")) udpSocket = socket(AF_INET,SOCK_DGRAM)
udpSocket.bind(("",3456)) tr = Thread(target=recvData)
ts = Thread(target=sendData) tr.start()
ts.start() tr.join()
ts.join() if __name__ == "__main__":
main()


5.版本4:全双工 优化


from threading import Thread
from socket import *
#1.收数据,然后打印
def recvData():
while True:
recvInfo = udpSocket.recvfrom(1024)
data = recvInfo[0].decode("gb2312")
print("\r>>%s:%s"%(recvInfo[1],data),end="")
print("\r>>")
#2.检测键盘,发数据
def sendData():
while True:
sendInfo = input("<< ")
udpSocket.sendto(sendInfo.encode("gb2312"),(destIp,destPort)) udpSocket = None
destIp = ""
destPort = 0 def main():
global udpSocket
global destIp
global destPort destIp = input("对方的ip:")
destPort = int(input("对方的port:")) udpSocket = socket(AF_INET,SOCK_DGRAM)
udpSocket.bind(("",7895)) tr = Thread(target=recvData)
ts = Thread(target=sendData) tr.start()
ts.start() tr.join()
ts.join() if __name__ == "__main__":
main()

6 问题
- 1.print函数
In [18]: print("ddd")
ddd
In [19]: help(print)

\n 软回车:
在Windows 中表示换行且回到下一行的最开始位置。相当于Mac OS 里的 \r 的效果。
在Linux、unix 中只表示换行,但不会回到下一行的开始位置。
\r 软空格:
在Linux、unix 中表示返回到当行的最开始位置。
在Mac OS 中表示换行且返回到下一行的最开始位置,相当于Windows 里的 \n 的效果。
\t 跳格(移至下一列)。
它们在双引号或定界符表示的字符串中有效,在单引号表示的字符串中无效。
\r\n 一般一起用,用来表示键盘上的回车键,也可只用 \n。
\t表示键盘上的“TAB”键。
文件中的换行符号:
linux,unix: \r\n
windows : \n
Mac OS : \r
5 多线程 模拟qq聊天的更多相关文章
- python模拟QQ聊天室(tcp加多线程)
python模拟QQ聊天室(tcp加多线程) 服务器代码: from socket import * from threading import * s = socket(AF_INET,SOCK_S ...
- 模拟QQ聊天与视频聊天同时进行-------java基础知识总结
前言:多线程的知识 代码: package com.day13.math; /** * 类说明 :模拟QQ聊天与视频聊天同时进行 * @author 作者 : chenyanlong * @versi ...
- TCP模拟QQ聊天功能
需求: 模拟qq聊天功能:实现客户端与服务器(一对一)的聊天功能,客户端首先发起聊天,输入的内容在服务器端和客户端显示,然后服务器端也可以输入信息,同样信息在客户端和服务端显示. 提示: 客户端 1) ...
- 利用JavaUDPSocket+多线程模拟实现一个简单的聊天室程序
对Socket的一点个人理解:Socket原意是指插座.家家户户都有五花八门的家用电器,但它们共用统一制式的插座.这样做的好处就是将所有家用电器的通电方式统一化,不需要大费周章地在墙壁上凿洞并专门接电 ...
- QQ聊天界面的布局和设计(IOS篇)-第一季
我写的源文件整个工程会再第二季中发上来~,存在百度网盘, 感兴趣的童鞋, 可以关注我的博客更新,到时自己去下载~.喵~~~ QQChat Layout - 第一季 一.准备工作 1.将假数据messa ...
- 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)
搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...
- Android—简单的仿QQ聊天界面
最近仿照QQ聊天做了一个类似界面,先看下界面组成(画面不太美凑合凑合呗,,,,):
- Socket实现仿QQ聊天(可部署于广域网)附源码(1)-简介
1.前言 本次实现的这个聊天工具是我去年c#程序设计课程所写的Socket仿QQ聊天,由于当时候没有自己的服务器,只能在机房局域网内进行测试,最近在腾讯云上买了一台云主机(本人学生党,腾讯云有个学生专 ...
- java 模拟qq源码
java 模拟qq源码: http://files.cnblogs.com/files/hujunzheng/QQ--hjzgg.zip
随机推荐
- Perl 基础笔记: 使用 cpanm 安装 Perl 模块
cpanm 其实只是一个可执行文件而已.将它下载到 bin 目录,然后添加执行权限就可以用了. $ sudo wget http://xrl.us/cpanm -O /usr/bin/cpanm; s ...
- QQ空间那年今日 & 人人过往的今天
都说天下文章一大抄!就看你会抄不会抄! 过往的今天这个功能很新颖,不过最后还是被企鹅抄走了~该出手时就出手! 自从过往的今天功能低调上线后,断断续续总是有人提到这个功能,有褒有贬: 顶的认为人人让自己 ...
- 接口测试get请求url拼接函数(python)
get请求地址一般是 协议+域名+端口+路径+参数,除了协议和域名其他均可为空. http(s)://domain:port/path?key1=value1&key2=value2& ...
- 用ant打包apkbuilder找不到了的解决办法
apkbuilder的情况下生成apk文件,其实apkbuilder是一个批处理文件,打开里面就能发现,其实他内部执行的是sdklib.jar里面的一个class,所以就知道怎么做了,很简单,我们自己 ...
- L2范数惩罚项,高维线性回归
%matplotlib inline import mxnet from mxnet import nd,autograd from mxnet import gluon,init from mxne ...
- Django ORM之QuerySet方法大全
################################################################## # PUBLIC METHODS THAT ALTER ATTRI ...
- python 通过 socket 发送文件
目录结构: client: #!/usr/bin/env python # -*-coding:utf-8 -*- import socket, struct, json download_dir = ...
- c#数据库连接池
因为使用习惯的问题,我封装了一个数据库连接池Hikari,这是我自定义的数据库连接池.因为c#的连接池按照规范的ADO.NET里面实现定义的,由数据库官方提供,但是实现方式就不知道了,反正没有看出来, ...
- Linux基础 ppt pptx
引言 以前写过一个讲 Linux 基础的ppt,琢磨着把它分享出来,有需要的请自取. 部分截图如下 下载地址 下载地址1
- string类中字符的大小写转换
今天做一道题,要用string类,涉及大小写转换,查看了C++文档,string类没有提供这样的方法,只好自己写. 之后是想到一个比较笨的方法,我把string当成一个容器,然后用迭代器一个一个来替换 ...