您好,登錄后才能下訂單哦!
Hello大家好,今天說一下python的socket編程,基于python的socket通信的文本框網絡聊天
首先,實驗環境:
一個云服務器(我們這里是用的阿里云,大家將就自己的條件吧);
類Unix操作系統(如Mac OS,Linux等);
Windows系列操作系統。
在這里,我使用的是阿里云,Mac OSX,Windows XP(在mac上的一個虛擬機)。
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:#接受客戶端數據 try: temp = conn.recv(1024) if not temp: conn.close()#連接關閉 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()#獲取計算機名 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()#獲取操作系統用戶名 ip = "云空間IP地址" sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((ip, 端口)) sock.send(nick) thin = threading.Thread(target = DealIn, args = (sock,))#開辟一個讀入的線程 thin.start() thout = threading.Thread(target = DealOut, args = (sock,))#開辟一個寫出的線程 thout.start()
將server.py上傳云端,運行,如圖:
將client.py在mac系統上運行,如圖:
將client.py在WindowsXP虛擬機上運行,如圖:
OK,這就可以了,一個基于python的socket通信的文本框網絡聊天室就寫好了。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。