Python入门:socket(server篇)

7 篇文章 0 订阅
2 篇文章 0 订阅

python创建socket客户端与socket服务器,区别不大,有listen方法既为server,发送数据用send方法,可以参照java的socket。

ps:为什么,python的应用无法用Ctrl+C干掉?


参考文章:http://blog.sina.com.cn/s/blog_523491650100hikg.html


#!/bin/python
#python version 3.1+
import socket
class TestServer:
	'''这是一个简单的python socket server'''
	
	def __init__(self, ip='localhost', iPort=8771):	
		'''初始方法'''
		self.ip = ip
		self.iPort = iPort
	
	def start(self):		
		print("TestServer start({0}:{1})...".format(self.ip, self.iPort))
				
		cc = 1		
		ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
		ss.settimeout(1000 * 10)
		ss.bind((self.ip, self.iPort))
		ss.listen(5)
		
		while cc <= 5: #只接收5次客户端连接
			(client, address) = ss.accept()
			print("client connecting:",cc)
			cc+=1
			
			client.send(b'hello')
			client.close()
		ss.close()
		print("TestServer close, bye-bye.")	
	
	
if __name__ == "__main__":
	ts = TestServer()
	ts.start()

这是改进版:

#!/bin/python
#python version 3.1+
import socket
import threading

class ConnectHandler(threading.Thread):
    '''与客户端连接的处理类'''
    
    def setConnect(self, connect):
        self.connect = connect
    
    def run(self): 
        msg = '你好'.encode("utf-8")               
        self.connect.send(msg)
        self.connect.close()
        
class TestServer:    
    def __init__(self, ip='localhost', iPort=8771):    
        
        self.ip = ip
        self.iPort = iPort
    
    def start(self):        
        print("TestServer start({0}:{1})...".format(self.ip, self.iPort))
                
        cc = 1        
        ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        ss.settimeout(1000 * 10)
        ss.bind((self.ip, self.iPort))
        ss.listen(5)
        
#        while cc <= 5: 
        while True:
            (client, address) = ss.accept()
            print("client connecting:",cc)
            cc+=1            
            ch = ConnectHandler()
            ch.setConnect(client)
            ch.start()
            #client.send(b'hello')
            #client.close()
        ss.close()
        print("TestServer close, bye-bye.")    
    
    
if __name__ == "__main__":
    ts = TestServer()
    ts.start()


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值