众所周知,tcp通过socket实现的通讯,但是对于日常使用的列表收发就显得有些困难了,在这期间,我看过很多文章,已经开始头大了,此时看到一篇文章里讲了python中的bytes和bytearray类型的数据与转码,我就看到了希望:
文章链接:http://cnblogs.com/f-ck-need-u/p/10185965.html
从其中我看到了关于列表转化为bytearray和bytearray转化为列表的操作,
nn = bytearray([10,11,12])
x = [i for i in nn]
print(x)
这就OK了,通过这样的方式可以将列表转化为bytearray转发出去
client代码:
import socket
import threading
import time
class socketCreateStoppable(threading.Thread):
"""Thread class with a stop() method. The thread itself has to check
regularly for the stopped() condition."""
def __init__(self,server_ip, server_port):
super(socketCreateStoppable, self).__init__()
self._stop_event = threading.Event()
#print('server_ip',server_ip_list)
#print(time.localtime(time.time()))
self.server_ip = server_ip
self.server_port = server_port
self.tcp_client = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
def stop(self):
print(time.time())
print('#'*20)
self._stop_event.set()
self.tcp_client.close() # 在停止的时候将tcp_client关掉
print(time.time(),'stop success')
def stopped(self):
return self._stop_event.is_set()
def run(self):
while True:
try:
self.tcp_client.connect((self.server_ip, self.server_port))
print('server_ip:', self.server_ip)
while True:
# 3.收发
recv_content = self.tcp_client.recv(1024)
print(type(recv_content))
self.dataList = list(recv_content)
print(self.dataList)
except Exception as e:
print(e)
time.sleep(5)
#print("sleep 1s")
time.sleep(1)
if self.stopped():
# 做一些必要的收尾工作
self.tcp_client.close()
break
if __name__ == '__main__':
t1 = socketCreateStoppable('192.168.1.139',5026)
t1.start()
server代码:
import threading
import socket
import time
class tcpServer(threading.Thread):
def __init__(self,server_ip,server_port):
super(tcpServer,self).__init__()
self._stop_event = threading.Event()
self.server_ip = server_ip
self.server_port = server_port
self.tcp_server = socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)
def stop(self):
self._stop_event.set()
def stopped(self):
return self._stop_event.is_set()
def run(self):
self.tcp_server.bind((self.server_ip,self.server_port))
self.tcp_server.listen(128)
while True:
new_server_socket,client_addr = self.tcp_server.accept()
print(client_addr)
while True:
x = [1,2,3]
send_cont = bytearray(x)
new_server_socket.send(send_cont)
time.sleep(2)
if __name__ == '__main__':
serverThread = tcpServer('192.168.1.139',5026)
serverThread.start()