python线程心跳包粗谈

client:

python;toolbar:false">#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------->>>>>"


以上是 python线程心跳包粗谈 的全部内容, 来源链接: www.h5w3.com/116125.html

回到顶部