Python socket聊天室!

这篇文章是copy的,我自己写的不能把每个人发送的数据在别人的屏幕上显示!先把他的保存在我这里看下!

 1 #!/usr/bin/env python
 2 #coding:utf-8
 3 
 4 import socket
 5 import sys
 6 import threading
 7  
 8 con = threading.Condition()
 9 HOST = raw_input("input the server's ip adrress: ") # Symbolic name meaning all available interfaces
10 PORT = 8888 # Arbitrary non-privileged port
11 data = ''
12  
13 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
14 print 'Socket created'
15 s.bind((HOST, PORT))
16 s.listen(10)
17 print 'Socket now listening'
18  
19 #Function for handling connections. This will be used to create threads
20 def clientThreadIn(conn, nick):
21     global data
22 #infinite loop so that function do not terminate and thread do not end.
23     while True:
24     #Receiving from client
25         try:
26             temp = conn.recv(1024)
27             if not temp:
28                 conn.close()
29                 return
30             NotifyAll(temp)
31             print data
32         except:
33             NotifyAll(nick + " leaves the room!")
34             print data
35             return
36  
37     #came out of loop
38  
39 def NotifyAll(sss):
40     global data
41     if con.acquire():
42         data = sss
43         con.notifyAll()
44         con.release()
45   
46 def ClientThreadOut(conn, nick):
47     global data
48     while True:
49         if con.acquire():
50             con.wait()
51             if data:
52                 try:
53                     conn.send(data)
54                     con.release()
55                 except:
56                     con.release()
57                     return
58                      
59  
60 while 1:
61     #wait to accept a connection - blocking call
62     conn, addr = s.accept()
63     print 'Connected with ' + addr[0] + ':' + str(addr[1])
64     nick = conn.recv(1024)
65      #send only takes string
66     #start new thread takes 1st argument as a function name to be run, second is the tuple of arguments to the function.
67     NotifyAll('Welcome ' + nick + ' to the room!')
68     print data
69     print str((threading.activeCount() + 1) / 2) + ' person(s)!'
70     conn.send(data)
71     threading.Thread(target = clientThreadIn , args = (conn, nick)).start()
72     threading.Thread(target = ClientThreadOut , args = (conn, nick)).start()
73  
74 s.close()

下面的是客户端代码:

 1 #!/usr/bin/env python
 2 #coding:utf-8
 3 
 4 import socket
 5 import threading
 6  
 7  
 8 inString = ''
 9 outString = ''
10 nick = ''
11  
12 def DealOut(s):
13     global nick, outString
14     while True:
15         outString = raw_input()
16         outString = nick + ': ' + outString
17         s.send(outString)
18  
19 def DealIn(s):
20     global inString
21     while True:
22         try:
23             inString = s.recv(1024)
24             if not inString:
25                 break
26             if outString != inString:
27                 print inString
28         except:
29             break
30          
31  
32 nick = raw_input("input your nickname: ")
33 ip = raw_input("input the server's ip adrress: ")
34 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
35 sock.connect((ip, 8888))
36 sock.send(nick)
37  
38 thin = threading.Thread(target = DealIn, args = (sock,))
39 thin.start()
40 thout = threading.Thread(target = DealOut, args = (sock,))
41 thout.start()
42  
43 #sock.close()

 

posted @ 2016-05-26 11:08  睚一  阅读(396)  评论(0编辑  收藏  举报