client:
#coding=utf-8 ''' client端 长连接,短连接,心跳 ''' import socket import time import threading host = 'localhost' port = 8090 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) #在客户端开启心跳维护 client.connect((host, port)) #threading.currentThread(): 返回当前的线程变量。 #threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。 #threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果. #除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了以下方法: #run(): 用以表示线程活动的方法。 #start():启动线程活动。 #join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。 #isAlive(): 返回线程是否活动的。 #getName(): 返回线程名。 #setName(): 设置线程名。 threadLock = threading.Lock() class myThread (threading.Thread):#继承父类threading.Thread def __init__(self, num): threading.Thread.__init__(self) self.num = num def run(self):#把要执行的代码写到run函数里面 线程在创建后会直接运行run函数 print "Starting " + self.name # 获得锁,成功获得锁定后返回True # 可选的timeout参数不填时将一直阻塞直到获得锁定 # 否则超时后将返回False threadLock.acquire() mythreading(self.num) # 释放锁 threadLock.release() def mythreading(num): i = int(num) while True: client.send(str(i)+"\n") print str(i)+"!!!!!!!!!!!!!!!!\n" time.sleep(1) #if i < 9: # client.send(str(i)) # print i # time.sleep(1) #如果想验证长时间没发数据,SOCKET连接会不会断开,则可以设置时间长一点 #else: # client.send(str(i)) # print i # break i = i + 1 print "线程停止循环了。。。。。。。" #threads = [] # 创建新线程 #thread1 = myThread(1) #thread2 = myThread(1000) # 添加线程到线程列表 #threads.append(thread1) #threads.append(thread2) # 等待所有线程完成 #for t in threads: # t.start() # t.join() #print "Exiting Main Thread" def threading_1(): i = 0 while True: client.send(str(i)+"\n") print str(i)+"!!!!!!!!!!!!!!!!\n" time.sleep(1) if i < 9: client.send(str(i)) print i time.sleep(1) #如果想验证长时间没发数据,SOCKET连接会不会断开,则可以设置时间长一点 else: client.send(str(i)) print i break i = i + 1 print "第一个线程停止循环了。。。。。。。" def threading_2(): j = 1000 while True: client.send(str(j)+"\n") print str(j)+"**************" time.sleep(1) if j < 1009: client.send(str(i)) print i time.sleep(1) #如果想验证长时间没发数据,SOCKET连接会不会断开,则可以设置时间长一点 else: client.send(str(i)) print i break j = j + 1 print "第二个线程停止循环了。。。。。。。" threads = [] t1 = threading.Thread(target=threading_1) threads.append(t1) t2 = threading.Thread(target=threading_2) threads.append(t2) for i in threads: i.start() i.join() print "Exiting Main Thread"
server:
#coding=utf-8 __author__ = '药师Aric' ''' server端 长连接,短连接,心跳 ''' import socket BUF_SIZE = 1024 host = 'localhost' port = 8090 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((host, port)) server.listen(2) #接收的连接数 client, address = server.accept() #因为设置了接收连接数为1,所以不需要放在循环中接收 while True: #循环收发数据包,长连接 data = client.recv(BUF_SIZE) print data #if int(data) >= 9: # print "1111111111111111111" # break # client.close() #连接不断开,长连接 client.close() print "stop------->>>>>"