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

  

时间: 2024-10-21 00:55:24

5 多线程 模拟qq聊天的相关文章

JAVA学习第六十课 — UDP协议 &amp;基于多线程模拟简单的QQ聊天程序

UDP传输 UDP有发送端和接受端,有两大类,DatagramSocket.DatagramPacket 建立发送端和接收端 建立数据包 调用Socket的接收发送方法 关闭Socket 注意:发送端和接收端是两个独立的运行程序 UDP发送端演示 DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号. public static voi

mina的编码和解码以及断包的处理,发送自定义协议,仿qq聊天,发送xml或json和

最近一段时间以来,mina很火,和移动开发一样,异常的火爆.前面写了几篇移动开发的文章,都还不错,你们的鼓励就是我最大的动力.好了,废话少说.我们来看下tcp通讯吧. tcp通讯对于java来说是很简单的.就是socket,也就是大家常说的套接字.大家不要把它看的很难.说白了tcp通讯其实就是数据流的读写.一条输入流,一条输出流.分别复杂发消息和接收消息. 明白了这些,ok,我们来看看我写的例子吧.先看服务器端的测试类的源码: package com.minaqq.test; import co

Android特效专辑(六)——仿QQ聊天撒花特效,无形装逼,最为致命

Android特效专辑(六)--仿QQ聊天撒花特效,无形装逼,最为致命 我的关于特效的专辑已经在CSDN上申请了一个专栏--http://blog.csdn.net/column/details/liuguilin.html 日后我所写的特效专辑也会以一添加在这个专栏上,今天写的这个特效,是关于聊天的,你肯定遇到过,就是你跟人家聊天的时候,比如发送应(么么哒),然后屏幕上全部就是表情了,今天我们就是做这个,撒花的特效,国际惯例,上图 截图 实现这样的效果,你要知道贝塞尔曲线,何谓贝塞尔曲线?其实

搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)

搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating-a-wpf-chat-client-server-application/ 注意:本教程是相当广泛的,如果你是在短请也看到我们的东西 开始和 如何在几分钟内创建一个客户端服务器应用程序教程. 注2:本例中包括,明显延长进一步证明功能,在包中包含的示例 包下载. 在我们开始之前确保您已经安装了Vis

Socket实现仿QQ聊天(可部署于广域网)附源码(1)-简介

1.前言 本次实现的这个聊天工具是我去年c#程序设计课程所写的Socket仿QQ聊天,由于当时候没有自己的服务器,只能在机房局域网内进行测试,最近在腾讯云上买了一台云主机(本人学生党,腾讯云有个学生专享活动一元一个月的云服务器,如果还是学生的可以试一下,地址http://www.qcloud.com/event/qcloudSchool),经过重新编码实现了广域网聊天的功能.下面开始介绍我的自制聊天软件啦!!! 2.功能 1. 聊天室服务器端的创建. 2. 聊天室客户端的创建. 3. 实现客户与

模拟QQ系统设置面板实现功能

业务需求: 基于网盘客户端的实现,原有网盘的设置面板无论从界面显示还是从业务需求都不能满足我们的正常需求.当前的要求是,模拟QQ系统设置的面板实现当前我们网盘中的基本配置功能.在完成这篇文章时已将基本功能实现完成,虽未整合进网盘客户端中,但基本技术预演已经实现. QQ系统设置面板分析: QQ系统设置面板效果图: QQ系统设置面板功能描述: 由于存在较多的配置,如果每个模块的配置项都设计到一个窗体中,则会存在很多的窗体,不太符合用户的使用体验,且程序编写也比较麻烦.QQ系统设置面板中的实现是,所有

仿QQ聊天软件2.0版

仿QQ聊天软件2.0版 转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907     上次课设做了Java版的仿QQ聊天程序,这次软件实训,我们继续完善了仿QQ聊天程序,将上次未完成及不完善的地方进行完善和改进,还新加了部分功能:表情输入.气泡模式.文件传输.截屏.语音聊天.逐步向QQ的基本功能靠齐.通过这次软件实训,又有了很多收获. 一.设计内容及要求 1.1综述 A.系统概述 我们要做的就是类似QQ这样的面向企业内部的聊天软件,基本功能和QQ类似.首先,

QQ 聊天机器人API

QQ机器人是腾讯陆续推出的的人工智能聊天机器人的总称.都说小Q妹妹聪明好学,我们可以教她说话,也可以请他帮忙查询邮编.手机号,或者解释成语.翻译成语,据说她还会查询手机号码归属地.应用科学计算器. 可是,在查新闻.查列车.车航班.查团购.查价格.查优惠.查酒店.查餐厅.查彩票等方面,小Q妹妹就弱爆了,"逆水行舟,不进则退"小Q妹妹真应该被pass掉了.笔者已经开始使用一款功能更强的机器人--图灵机器人.试一下这个高智商的机器人,她永远有耐心陪您聊天,不怕你调戏她,就怕你被她调戏.点这里

Objective-c——UI基础开发第八天(QQ聊天界面)

一.知识点: QQ聊天界面 双模型的使用(dataModel和frameModel) UITextField的使用 通知的使用 拉伸图片的两种方法(slicing/image对象的resizeableImageWithCapInsets属性) 枚举 方法的抽取(相同的拿出,不同的部分作为参数) 二.设置tableview的基本格式 1)定义tableview基本 numberOfSectionsInTableView:设置块 numberOfRowsInSection:设置每块对应的行数 cel