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
# 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
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
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------->>>>>"
socket心跳包python python 心跳包
转载文章标签 socket心跳包python python socket 心跳 长连接 数据 #if 文章分类 Python 后端开发
-
python怎么快捷引入报错的包
python报错及处理方法
Python 示例代码 自动安装