A. python多人聊天軟體只有最後進入的才能看見別人的幾率
1、單或多客戶端使用 telnet 登陸服務端 ( 可遠程 ) 進行會話
2、服務端實現登陸、注冊、退出功能
3、客戶端發送的消息會被廣播到已經登陸的其他用戶界面
4、連接到服務端後,可以執行相應的程序指令!
B. 有關python聊天程序
代碼簡單,直接看代碼吧:
復制代碼代碼如下:
import socket
import threading
import re
#import Tkinter
def ser():
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('',33333))
s.listen(1)
conn,addr=s.accept()
while True:
print '[%s:%d] send a message to me: %s'%(addr[0],addr[1],conn.recv(1024))
s.close()
def clt():
c=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ip_pattern=re.compile(r'^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$')
while True:
ip=raw_input('Input the Server\'s IPv4 address:')
ip_match=ip_pattern.match(ip)
if ip_match:
break
c.connect((ip,33333))
while True:
sms=raw_input('Input the message you want to send:')
c.sendall(sms)
c.close()
if __name__=="__main__":
ser=threading.Thread(target=ser)
clt=threading.Thread(target=clt)
ser.start()
clt.start()
ser.join()
clt.join()
C. 怎麼用python做一個聊天室不帶注釋,謝謝!
問題太大了兄弟,你怎麼不說怎麼做個淘寶京東呢。想要做聊天室,就要了解聊天室需要的技術,建議你看下python socket編程相關,一步一步來。比如先做一個無界面一問一答的雙人聊天室,然後做實時問答版的,在做多人實時聊天室版,再加上界面不就ok了,之後人多了系統扛不住了,在考慮如何提高系統性能。飯是一口一口吃,路是一步一步走。
D. python聊天程序裡面服務端這句代碼clientlist=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]是什麼意思
一般用-1表示未激活/異常/關閉/...的狀態(但這是一種不被提倡的風格)。若想知道具體的含義,請把代碼中與clientlist有關的函數和操作貼出來。
E. 利用Python語言,設計一個網路聊天程序,實現網路通信或者文件傳輸
這個是很有意思,也簡單的話題 。你可以使用twisted, 或者是socket, 實現。 如果想優美些可以用stackless,也可以用greenlet。
最簡單的辦法是使用內置的httpserver,通過多線程socketserver,和simplehttpserver實現簡單的交互。
F. 如何優雅的用Python玩轉語音聊天機器人
所需硬體:
樹莓派B+
人體紅外線感應模塊
內置麥克風攝像頭(實測樹莓派免驅淘寶鏈接)
申請API:
網路語音api
圖靈api
語音聊天機器人實現原理:當有人來到跟前時--》觸發聊天功能,開始以每2s檢測錄制語音--》通過網路語音api合成文字--》傳遞給圖靈api返回回答信息--》通過網路語音合成播放
【人體感應識別部分Python代碼renti.py】
#/usr/bin/python#coding:utf-8import RPi.GPIO as GPIOimport timeimport osimport signalimport atexitGPIO.setmode(GPIO.BCM) GPIO_PIR = 14 GPIO.setup(GPIO_PIR,GPIO.IN) # Echojing = 0dong = 0 sum = 0sum1 = 0oldren = 0sleep = 0def ganying(): i = 0 ok = 0 error = 0 while i < 10: if GPIO.input(GPIO_PIR) == 1 : ok = ok + 1 if GPIO.input(GPIO_PIR) == 0 : error = error + 1 time.sleep(0.01) i = i + 1 ren = ok/(error+1) return ren
1
GPIO_PIR = 14
為 紅外線檢測模塊與樹莓派的針腳,腳本函數返回0表示無人,>0 為有人
【Python語音識別聊天部分robot.py】
#/usr/bin/python# -*- coding:utf-8 -*-import sysreload(sys)sys.setdefaultencoding( "utf-8" )import urllibimport urllib2import jsonimport uuidimport base64import osimport timefrom renti import * #獲取網路tokenappid=7647466apikey="網路API"secretkey="網路API" _url="h.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + apikey + "&client_secret=" + secretkey; y_post=urllib2.urlopen(_url)y_read=y_post.read()y_token=json.loads(y_read)['access_token']#print y_read#print y_token #------------------function------------- def luyin(): os.system('arecord -D plughw:1,0 -c 1 -d 2 1.wav -r 8000 -f S16_LE 2>/dev/null') def fanyi():
#---------------語音識別部分 mac_address="haogeoyes" with open("1.wav",'rb') as f: s_file = f.read() speech_base64=base64.b64encode(s_file).decode('utf-8') speech_length=len(s_file) data_dict = {'format':'wav', 'rate':8000, 'channel':1, 'cuid':mac_address, 'token':y_token, 'lan':'zh', 'speech':speech_base64, 'len':speech_length} json_data = json.mps(data_dict).encode('utf-8') json_length = len(json_data) asr_server = 'm/server_api' request = urllib2.Request(url=asr_server) request.add_header("Content-Type", "application/json") request.add_header("Content-Length", json_length) fs = urllib2.urlopen(url=request, data=json_data) result_str = fs.read().decode('utf-8') json_resp = json.loads(result_str) if json_resp.has_key('result'): out_txt=json_resp['result'][0] else: out_txt="Null" return out_txt def tuling(b): f=urllib.urlopen("23.com/openapi/api?key="此處為圖靈API"&info=%s" % b) f=json.loads(f.read())['text'] return f def hecheng(text,y_token): #text="你好我是機器人牛牛很高興能夠認識你" geturl="u.com/text2audio?tex="+text+"&lan=zh&per=1&pit=9&spd=6&cuid=CCyo6UGf16ggKZGwGpQYL9Gx&ctp=1&tok="+y_token return os.system('omxplayer "%s" > /dev/null 2>&1 '%(geturl)) #return os.system('omxplayer "%s" > /dev/null 2>&1 '%(geturl)) def nowtime(): return time.strftime('%Y-%m-%d %H:%M:%S ') #---------------main-----------------num=0 #num用來判斷是第一次說話,還是在對話過程中first=1 #判斷是不是第一說話 當1000次沒有人動認為是第一次while True: if ganying()!=0: run=open('run.log','a') if first==0: hecheng("你好,我是牛牛機器人,你可以和我聊天,不過說話的時候你必須靠近話筒近一點,",y_token) hecheng("說點什麼吧,2秒鍾內說完哦.",y_token) first=1 #為1一段時間就不執行 num=0 #從新計數 #print ganying() run.write(nowtime()+"說點神馬吧..........."+'\n') print nowtime()+"說點神馬吧.........." luyin() #開始錄音 out=fanyi().encode("utf-8") #翻譯文字 run.write(nowtime()+"我說:"+out+'\n') print nowtime()+"我說:"+out if out == "Null": text="沒有聽清楚你說什麼" os.system('omxplayer "shenme.wav" > /dev/null 2>&1 ') else: text=tuling(out) hecheng(text,y_token) print nowtime()+"牛牛:"+text run.write(nowtime()+"牛牛:"+text+'\n') run.close() else: #print ganying() #調試查看是否為0有人沒人 #print num num=num+1 #num長時間增大說明沒有人在旁邊 if num > 1000: first=0 #0表示第一次說話
萬事俱備 運行nohup python robot.py 哈哈就可以脫離屏幕開始愉快的語音聊天啦
下面看看聊天的日誌記錄吧
後續更新。。。。。。Python如何用語音優雅的控制小車
G. 如何用Python編寫一個聊天室
一、課程介紹
1.簡介
本次項目課是實現簡單聊天室程序的伺服器端和客戶端。
2.知識點
伺服器端涉及到asyncore、asynchat和socket這幾個模塊,客戶端用到了telnetlib、wx、time和thread這幾個模塊。
3.所需環境
本次課中編寫客戶端需要用到wxPython,它是一個GUI工具包,請先使用下面的命令安裝:
$ sudo apt-get install python-wxtools
密碼為shiyanlou
4.項目效果截圖
登錄窗口
二、項目實戰(伺服器端)
1.伺服器類
首先需要一個聊天伺服器,這里繼承asyncore的dispatcher類來實現,代碼如下
class ChatServer(dispatcher):
"""
聊天伺服器
"""
def __init__(self, port):
dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.set_reuse_addr()
self.bind(('', port))
self.listen(5)
self.users = {}
self.main_room = ChatRoom(self)
def handle_accept(self):
conn, addr = self.accept()
ChatSession(self, conn)
2.會話類
有了伺服器類還需要能維護每個用戶的連接會話,這里繼承asynchat的async_chat類來實現,代碼如下:
class ChatSession(async_chat):
"""
負責和單用戶通信
"""
def __init__(self, server, sock):
async_chat.__init__(self, sock)
self.server = server
self.set_terminator('
')
self.data = []
self.name = None
self.enter(LoginRoom(server))
def enter(self, room):
'從當前房間移除自身,然後添加到指定房間'
try:
cur = self.room
except AttributeError:
pass
else:
cur.remove(self)
self.room = room
room.add(self)
def collect_incoming_data(self, data):
'接受客戶端的數據'
self.data.append(data)
def found_terminator(self):
'當客戶端的一條數據結束時的處理'
line = ''.join(self.data)
self.data = []
try:
self.room.handle(self, line)
except EndSession:
self.handle_close()
def handle_close(self):
async_chat.handle_close(self)
self.enter(LogoutRoom(self.server))
3.命令解釋器
現在就需要一個命令解釋器能夠解釋用戶的命令,例如登錄、查詢在線用戶和發消息等,代碼如下:
class CommandHandler:
"""
命令處理類
"""
def unknown(self, session, cmd):
'響應未知命令'
session.push('Unknown command: %s
' % cmd)
def handle(self, session, line):
'命令處理'
if not line.strip():
return
parts = line.split(' ', 1)
cmd = parts[0]
try:
line = parts[1].strip()
except IndexError:
line = ''
meth = getattr(self, 'do_' + cmd, None)
try:
meth(session, line)
except TypeError:
self.unknown(session, cmd)
4.房間
接下來就需要實現聊天室的房間了,這里我們定義了三種房間,分別是用戶剛登錄時的房間、聊天的房間和退出登錄的房間,這三種房間都有一個公共的父類,代碼如下:
class Room(CommandHandler):
"""
包含多個用戶的環境,負責基本的命令處理和廣播
"""
def __init__(self, server):
self.server = server
self.sessions = []
def add(self, session):
'一個用戶進入房間'
self.sessions.append(session)
def remove(self, session):
'一個用戶離開房間'
self.sessions.remove(session)
def broadcast(self, line):
'向所有的用戶發送指定消息'
for session in self.sessions:
session.push(line)
def do_logout(self, session, line):
'退出房間'
raise EndSession
class LoginRoom(Room):
"""
剛登錄的用戶的房間
"""
def add(self, session):
'用戶連接成功的回應'
Room.add(self, session)
session.push('Connect Success')
def do_login(self, session, line):
'登錄命令處理'
name = line.strip()
if not name:
session.push('UserName Empty')
elif name in self.server.users:
session.push('UserName Exist')
else:
session.name = name
session.enter(self.server.main_room)
class ChatRoom(Room):
"""
聊天用的房間
"""
def add(self, session):
'廣播新用戶進入'
session.push('Login Success')
self.broadcast(session.name + ' has entered the room.
')
self.server.users[session.name] = session
Room.add(self, session)
def remove(self, session):
'廣播用戶離開'
Room.remove(self, session)
self.broadcast(session.name + ' has left the room.
')
def do_say(self, session, line):
'客戶端發送消息'
self.broadcast(session.name + ': ' + line + '
')
def do_look(self, session, line):
'查看在線用戶'
session.push('Online Users:
')
for other in self.sessions:
session.push(other.name + '
')
class LogoutRoom(Room):
"""
用戶退出時的房間
"""
def add(self, session):
'從伺服器中移除'
try:
del self.server.users[session.name]
except KeyError:
pass
5.伺服器端完整代碼
#!/usr/bin/python
# encoding: utf-8
from asyncore import dispatcher
from asynchat import async_chat
import socket, asyncore
PORT = 6666 #埠
class EndSession(Exception):
"""
自定義會話結束時的異常
"""
pass
class CommandHandler:
"""
命令處理類
"""
def unknown(self, session, cmd):
'響應未知命令'
session.push('Unknown command: %s
' % cmd)
def handle(self, session, line):
'命令處理'
if not line.strip():
return
parts = line.split(' ', 1)
cmd = parts[0]
try:
line = parts[1].strip()
except IndexError:
line = ''
meth = getattr(self, 'do_' + cmd, None)
try:
meth(session, line)
except TypeError:
self.unknown(session, cmd)
class Room(CommandHandler):
"""
包含多個用戶的環境,負責基本的命令處理和廣播
"""
def __init__(self, server):
self.server = server
self.sessions = []
def add(self, session):
'一個用戶進入房間'
self.sessions.append(session)
def remove(self, session):
'一個用戶離開房間'
self.sessions.remove(session)
def broadcast(self, line):
'向所有的用戶發送指定消息'
for session in self.sessions:
session.push(line)
def do_logout(self, session, line):
'退出房間'
raise EndSession
class LoginRoom(Room):
"""
剛登錄的用戶的房間
"""
def add(self, session):
'用戶連接成功的回應'
Room.add(self, session)
session.push('Connect Success')
def do_login(self, session, line):
'登錄命令處理'
name = line.strip()
if not name:
session.push('UserName Empty')
elif name in self.server.users:
session.push('UserName Exist')
else:
session.name = name
session.enter(self.server.main_room)
class ChatRoom(Room):
"""
聊天用的房間
"""
def add(self, session):
'廣播新用戶進入'
session.push('Login Success')
self.broadcast(session.name + ' has entered the room.
')
self.server.users[session.name] = session
Room.add(self, session)
def remove(self, session):
'廣播用戶離開'
Room.remove(self, session)
self.broadcast(session.name + ' has left the room.
')
def do_say(self, session, line):
'客戶端發送消息'
self.broadcast(session.name + ': ' + line + '
')
def do_look(self, session, line):
'查看在線用戶'
session.push('Online Users:
')
for other in self.sessions:
session.push(other.name + '
')
class LogoutRoom(Room):
"""
用戶退出時的房間
"""
def add(self, session):
'從伺服器中移除'
try:
del self.server.users[session.name]
except KeyError:
pass
class ChatSession(async_chat):
"""
負責和單用戶通信
"""
def __init__(self, server, sock):
async_chat.__init__(self, sock)
self.server = server
self.set_terminator('
')
self.data = []
self.name = None
self.enter(LoginRoom(server))
def enter(self, room):
'從當前房間移除自身,然後添加到指定房間'
try:
cur = self.room
except AttributeError:
pass
else:
cur.remove(self)
self.room = room
room.add(self)
def collect_incoming_data(self, data):
'接受客戶端的數據'
self.data.append(data)
def found_terminator(self):
'當客戶端的一條數據結束時的處理'
line = ''.join(self.data)
self.data = []
try:
self.room.handle(self, line)
except EndSession:
self.handle_close()
def handle_close(self):
async_chat.handle_close(self)
self.enter(LogoutRoom(self.server))
class ChatServer(dispatcher):
"""
聊天伺服器
"""
def __init__(self, port):
dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.set_reuse_addr()
self.bind(('', port))
self.listen(5)
self.users = {}
self.main_room = ChatRoom(self)
def handle_accept(self):
conn, addr = self.accept()
ChatSession(self, conn)
if __name__ == '__main__':
s = ChatServer(PORT)
try:
asyncore.loop()
except KeyboardInterrupt:
print
三、項目實戰(客戶端)
完成了伺服器端後,就需要實現客戶端了,這里客戶端連接伺服器使用了telnetlib模塊。
1.登錄窗口
這里的圖形界麵包選擇了wxPython,前面有安裝說明,登錄窗口通過繼承wx.Frame類來實現,代碼如下:
class LoginFrame(wx.Frame):
"""
登錄窗口
H. 如何用python寫聊天機器人
它這個軟體的辨音比IPHONE的要差,我當時找個做英語老師的朋友發音,它一樣辨不出來。只是雞肋一個,沒什麼大用的。
I. 如何用Python編寫一個手機聊天軟體或程序
伺服器端涉及到asyncore、asynchat和socket這幾個模塊,客戶端用到了telnetlib、wx、time和thread這幾個模塊。