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 socketimport sysimport 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 socketimport threadingimport 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系統上運行,如圖:
新聞熱點
疑難解答