在 python 中使用 TCP 套接字编程从服务器接收数据并将其写入 .txt 文件
Receiving data from server and writing it into a .txt file using TCP socket programming in python
我正在从服务器接收数据块,该服务器将数据块作为字符串发送出去,前 3 个字节表示数据的字节数。其余数据由它们之间的制表符分隔。我想在我的客户端接收它们并将其写入文本文件。 但是当我将它写入.txt 文件时,之前的数据正在被重新写入。另外,我想限制接收的数据块数量。
这是我的代码:
Server.py
def Main():
host = '127.0.0.1'
port = 5003
s = socket.socket()
s.bind((host,port))
s.listen(5)
print("Server started")
while True:
c,addr = s.accept()
print("Client connected ip:<" + str(addr) + ">")
#c.sendall('232 23/02/2020 18:11:56 567 4 1 6 0 0 0 0 1510.26 1524.211 1536.369 1550.656 1563.790 1577.245 45 58 41 53 47 52 2 10 0 0 0 0 1510.83 1518.992 1526.89 1534.056 1542.597 1550.394 1558.07 1566.34 1574.286 1582.056 44 60 42 41 47 48 42 44 42 49 3 7 0 0 0 0 1510.95 1518.936 1528.055 1536.916 1545.605 1555.107 1563.437 1572.349 1582.091 59 41 46 45 41 53 42 43 60 4 15 0 0 0 0 1510.72 1516 1520.677 1526.604 1531.569 1537.594 1542.333 1547.744 1553.187 1558.118 1564.245 1569.357 1574.308 1579.758 1585.661 54 53 40 52 45 49 47 48 50 42 58 54 46 48 60'.encode())
# t = threading.Thread(target = RetrFile, args=("retrThread", c,))
#c.sendall('232 24/02/2020 18:11:56 567 4 1 6 0 0 0 0 1510.26 1524.211 1536.369 1550.656 1563.790 1577.245 45 58 41 53 47 52 2 10 0 0 0 0 1510.83 1518.992 1526.89 1534.056 1542.597 1550.394 1558.07 1566.34 1574.286 1582.056 44 60 42 41 47 48 42 44 42 49 3 7 0 0 0 0 1510.95 1518.936 1528.055 1536.916 1545.605 1555.107 1563.437 1572.349 1582.091 59 41 46 45 41 53 42 43 60 4 15 0 0 0 0 1510.72 1516 1520.677 1526.604 1531.569 1537.594 1542.333 1547.744 1553.187 1558.118 1564.245 1569.357 1574.308 1579.758 1585.661 54 53 40 52 45 49 47 48 50 42 58 54 46 48 60'.encode())
#c.sendall('\t')
# t.start()
c.sendall('67 24/02/2020 18:11:56 567 4 1 6 0 0 0 0 1510.26 1524.211 1536.369 155'.encode())
c.sendall('67 25/02/2020 18:11:56 567 4 1 6 0 0 0 0 1510.26 1524.211 1536.369 156'.encode())
c.close()
# s.close()
if __name__ == '__main__':
Main()
Client.py
def Main():
host = '127.0.0.1'
port = 5003
s = socket.socket()
s.connect((host,port))
i = 0
#for i < 2:
len_message = s.recv(3)
print(len_message)
while len_message:
bytes_length = int(len_message.decode())
#data_length = (bytes_length + 3)
print(bytes_length)
#print(data_length)
data = s.recv(bytes_length)
print(data)
write_file(data)
len_message = s.recv(3)
#i+=1
s.close()
def write_file(data):
with open("Output.txt", "wb") as text_file:
text_file.write(data)
text_file.write('\n'.encode())
if __name__ == '__main__':
Main()
以追加模式打开文件:
with open("Output.txt", "ab") as text_file:
我正在从服务器接收数据块,该服务器将数据块作为字符串发送出去,前 3 个字节表示数据的字节数。其余数据由它们之间的制表符分隔。我想在我的客户端接收它们并将其写入文本文件。 但是当我将它写入.txt 文件时,之前的数据正在被重新写入。另外,我想限制接收的数据块数量。 这是我的代码:
Server.py
def Main():
host = '127.0.0.1'
port = 5003
s = socket.socket()
s.bind((host,port))
s.listen(5)
print("Server started")
while True:
c,addr = s.accept()
print("Client connected ip:<" + str(addr) + ">")
#c.sendall('232 23/02/2020 18:11:56 567 4 1 6 0 0 0 0 1510.26 1524.211 1536.369 1550.656 1563.790 1577.245 45 58 41 53 47 52 2 10 0 0 0 0 1510.83 1518.992 1526.89 1534.056 1542.597 1550.394 1558.07 1566.34 1574.286 1582.056 44 60 42 41 47 48 42 44 42 49 3 7 0 0 0 0 1510.95 1518.936 1528.055 1536.916 1545.605 1555.107 1563.437 1572.349 1582.091 59 41 46 45 41 53 42 43 60 4 15 0 0 0 0 1510.72 1516 1520.677 1526.604 1531.569 1537.594 1542.333 1547.744 1553.187 1558.118 1564.245 1569.357 1574.308 1579.758 1585.661 54 53 40 52 45 49 47 48 50 42 58 54 46 48 60'.encode())
# t = threading.Thread(target = RetrFile, args=("retrThread", c,))
#c.sendall('232 24/02/2020 18:11:56 567 4 1 6 0 0 0 0 1510.26 1524.211 1536.369 1550.656 1563.790 1577.245 45 58 41 53 47 52 2 10 0 0 0 0 1510.83 1518.992 1526.89 1534.056 1542.597 1550.394 1558.07 1566.34 1574.286 1582.056 44 60 42 41 47 48 42 44 42 49 3 7 0 0 0 0 1510.95 1518.936 1528.055 1536.916 1545.605 1555.107 1563.437 1572.349 1582.091 59 41 46 45 41 53 42 43 60 4 15 0 0 0 0 1510.72 1516 1520.677 1526.604 1531.569 1537.594 1542.333 1547.744 1553.187 1558.118 1564.245 1569.357 1574.308 1579.758 1585.661 54 53 40 52 45 49 47 48 50 42 58 54 46 48 60'.encode())
#c.sendall('\t')
# t.start()
c.sendall('67 24/02/2020 18:11:56 567 4 1 6 0 0 0 0 1510.26 1524.211 1536.369 155'.encode())
c.sendall('67 25/02/2020 18:11:56 567 4 1 6 0 0 0 0 1510.26 1524.211 1536.369 156'.encode())
c.close()
# s.close()
if __name__ == '__main__':
Main()
Client.py
def Main():
host = '127.0.0.1'
port = 5003
s = socket.socket()
s.connect((host,port))
i = 0
#for i < 2:
len_message = s.recv(3)
print(len_message)
while len_message:
bytes_length = int(len_message.decode())
#data_length = (bytes_length + 3)
print(bytes_length)
#print(data_length)
data = s.recv(bytes_length)
print(data)
write_file(data)
len_message = s.recv(3)
#i+=1
s.close()
def write_file(data):
with open("Output.txt", "wb") as text_file:
text_file.write(data)
text_file.write('\n'.encode())
if __name__ == '__main__':
Main()
以追加模式打开文件:
with open("Output.txt", "ab") as text_file: