H5W3
当前位置:H5W3 > python > 正文

python线程心跳包粗谈

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------->>>>>"

本文地址:H5W3 » python线程心跳包粗谈

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址