rabin 7 years ago
parent
commit
52ade75103
3 changed files with 77 additions and 0 deletions
  1. 6 0
      tcp/__init__.py
  2. 24 0
      tcp/client.py
  3. 47 0
      tcp/server.py

+ 6 - 0
tcp/__init__.py

@@ -0,0 +1,6 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+    demeter init
+    author:rabin
+"""

+ 24 - 0
tcp/client.py

@@ -0,0 +1,24 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+	demeter tcp
+	name:client.py
+	author:rabin
+"""
+import socket  
+import time  
+HOST = '0.0.0.0'	# The remote host  
+PORT = 8000		   # The same port as used by the server  
+s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
+s.connect((HOST, PORT))  
+  
+s.sendall('Hello, \nw')  
+time.sleep(5)  
+s.sendall('ord! \n')  
+  
+data = s.recv(1024)  
+  
+print 'Received', repr(data)  
+  
+time.sleep(60)  
+s.close() 

+ 47 - 0
tcp/server.py

@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+	demeter tcp
+	name:server.py
+	author:rabin
+"""
+from tornado.tcpserver import TCPServer
+from tornado.ioloop  import IOLoop
+
+class Connection(object):	
+	clients = set()	
+	def __init__(self, stream, address):   
+		Connection.clients.add(self)   
+		self._stream = stream	
+		self._address = address	
+		self._stream.set_close_callback(self.on_close)	
+		self.read_message()	
+		print "A new user has entered the chat room.", address   
+		
+	def read_message(self):	
+		self._stream.read_until('\n', self.broadcast_messages)	
+	
+	def broadcast_messages(self, data):	
+		print "User said:", data[:-1], self._address  
+		for conn in Connection.clients:	
+			conn.send_message(data)	
+		self.read_message()	
+		
+	def send_message(self, data):	
+		self._stream.write(data)   
+			
+	def on_close(self):	
+		print "A user has left the chat room.", self._address  
+		Connection.clients.remove(self)
+	
+class ChatServer(TCPServer):	
+	def handle_stream(self, stream, address):   
+		print "New connection :", address, stream   
+		Connection(stream, address)   
+		print "connection num is:", len(Connection.clients)  
+	
+if __name__ == '__main__':	
+	print "Server start ......"	
+	server = ChatServer()
+	server.listen(8000)
+	IOLoop.instance().start()