您好,登錄后才能下訂單哦!
Hello大家好,今天說一下python的socket編程,基于python的socket通信的文本框網(wǎng)絡(luò)聊天
首先,實(shí)驗(yàn)環(huán)境:
一個(gè)云服務(wù)器(我們這里是用的阿里云,大家將就自己的條件吧);
類Unix操作系統(tǒng)(如Mac OS,Linux等);
Windows系列操作系統(tǒng)。
在這里,我使用的是阿里云,Mac OSX,Windows XP(在mac上的一個(gè)虛擬機(jī))。
Server.py
# -*- coding: utf-8 -*- #!/usr/local/bin/python import socket import sys import threading con = threading.Condition() HOST = "云空間的IP地址" PORT = 端口 data = '' s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print 'Socket created' s.bind((HOST, PORT)) s.listen(10) print 'Socket now listening' def clientThreadIn(conn, nick):#開辟線程 global data while True:#接受客戶端數(shù)據(jù) try: temp = conn.recv(1024) if not temp: conn.close()#連接關(guān)閉 return NotifyAll(temp) print data except: NotifyAll(nick + " leaves the room!") print data return def NotifyAll(sss):#廣播 global data if con.acquire(): data = sss con.notifyAll() con.release() def ClientThreadOut(conn, nick):#客戶端輸出 global data while True: if con.acquire(): con.wait() if data: try: conn.send(data) con.release() except: con.release() return while 1: conn, addr = s.accept() print 'Connected with ' + addr[0] + ':' + str(addr[1]) nick = conn.recv(1024) NotifyAll('Welcome ' + nick + ' to the room!') print data print str((threading.activeCount() + 1) / 2) + ' person(s)!' conn.send(data) threading.Thread(target = clientThreadIn , args = (conn, nick)).start()#開辟線程 threading.Thread(target = ClientThreadOut , args = (conn, nick)).start() s.close()
Client.py
# -*- coding: utf-8 -*- import socket import threading import getpass inString = '' outString = '' nick = '' def DealOut(s): computername=socket.gethostname()#獲取計(jì)算機(jī)名 global nick, outString while True: outString = raw_input(nick+":") outString = nick + "@" + computername + ': ' + outString s.send(outString) def DealIn(s): global inString while True: try: inString = s.recv(1024) if not inString: break if outString != inString: print inString except: break nick = getpass.getuser()#獲取操作系統(tǒng)用戶名 ip = "云空間IP地址" sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((ip, 端口)) sock.send(nick) thin = threading.Thread(target = DealIn, args = (sock,))#開辟一個(gè)讀入的線程 thin.start() thout = threading.Thread(target = DealOut, args = (sock,))#開辟一個(gè)寫出的線程 thout.start()
將server.py上傳云端,運(yùn)行,如圖:
將client.py在mac系統(tǒng)上運(yùn)行,如圖:
將client.py在WindowsXP虛擬機(jī)上運(yùn)行,如圖:
OK,這就可以了,一個(gè)基于python的socket通信的文本框網(wǎng)絡(luò)聊天室就寫好了。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。