客户端:
import re
import socket
class ll:
def llOrder():
'''ll客户端发送数据给server'''
# 目标服务器的ip和端口号
server_ip_port= ('服务器ip', 端口)
# 客户端、创建client-socket TCP协议
# 创建客户端socket对象
llclient_socket= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 客户端发送建立连接的请求,服务器默认配置为自动接受连接
llclient_socket.connect(server_ip_port)
print("ll客户端启动,等待DL接受连接...")
with open(r"D\:报文.txt") as file:
lines= file.read()
# 循环发送每行数据给服务器,rstrip去除右侧空格,lstrip左侧,strip全部
# for line in lines:
# Line = line.rstrip('\n') # 去除换行符
# 将文件指定的数据替换为16进制字符编码'\x05'bytes类型
bdata= lines.replace('<ENQ>', '\x05').replace('<STX>', '\x02').replace('<CR>', '\r') \
.replace('<ETX>', '\x03').replace('<LF>', '\n').replace('<EOT>', '\x04').encode()
print(bdata)
# 向服务器发送数据
llclient_socket.send(bdata)
# 接收服务器返回的数据
recv_data= llclient_socket.recv(1024)
# 若服务器返回数据为b'\x06',则重新赋值为
if recv_data== b'\x06':
recv_data= ''
# 将接收到的数据转为字符串
# recv_str = str(recv_data, encoding='utf-8')
# b = chr(recv_data[0])
print('客户端接收到的服务器的数据为:', recv_data)
# todo 关闭socket
llclient_socket.close()
l=ll.llOrder()
![](https://img.haomeiwen.com/i25590772/9adc6917cb863487.png)
按照每行逐条发送:
import socket
class Lis:
def LisOrder():
'''Lis客户端发送数据给DL'''
# 目标服务器的ip和端口号
server_ip_port= ('ip', 8888)
# 客户端、创建client-socket TCP协议
# 创建客户端socket对象
Lisclient_socket= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 客户端发送连接的请求(不是传输数据的请求,是创建连接的请求),服务器自动接受连接
Lisclient_socket.connect(server_ip_port)
print("Lis客户端启动,等待DL接受连接...")
'''打开文件并转换每行<>内的字符类型'''
with open(r"D:\丁家杰\报文.txt") as file:
# 读取文件所有行
lines= file.readlines()
# 循环发送每行数据给服务器,rstrip去除右侧空格,lstrip左侧,strip全部
line1= lines[0].strip('\n') # 去除换行符
# 将文件指定的数据替换为16进制字符编码'\x05'bytes类型
bdata1= line1.replace('<ENQ>', '\x05').replace('<STX>', '\x02').replace('<CR>', '\r') \
.replace('<ETX>', '\x03').replace('<LF>', '\n').replace('<EOT>', '\x04').encode()
line2= lines[1].strip('\n') # 去除换行符
# 将文件指定的数据替换为16进制字符编码'\x05'bytes类型
bdata2= line2.replace('<ENQ>', '\x05').replace('<STX>', '\x02').replace('<CR>', '\r') \
.replace('<ETX>', '\x03').replace('<LF>', '\n').replace('<EOT>', '\x04').encode()
line3= lines[2].strip('\n') # 去除换行符
# 将文件指定的数据替换为16进制字符编码'\x05'bytes类型
bdata3= line3.replace('<ENQ>', '\x05').replace('<STX>', '\x02').replace('<CR>', '\r') \
.replace('<ETX>', '\x03').replace('<LF>', '\n').replace('<EOT>', '\x04').encode()
line4= lines[3].strip('\n') # 去除换行符
# 将文件指定的数据替换为16进制字符编码'\x05'bytes类型
bdata4= line4.replace('<ENQ>', '\x05').replace('<STX>', '\x02').replace('<CR>', '\r') \
.replace('<ETX>', '\x03').replace('<LF>', '\n').replace('<EOT>', '\x04').encode()
line5= lines[4].strip('\n') # 去除换行符
# 将文件指定的数据替换为16进制字符编码'\x05'bytes类型
bdata5= line5.replace('<ENQ>', '\x05').replace('<STX>', '\x02').replace('<CR>', '\r') \
.replace('<ETX>', '\x03').replace('<LF>', '\n').replace('<EOT>', '\x04').encode()
# 向服务器发送第一次数据
Lisclient_socket.send(bdata1)
# 接收服务器第一次返回的数据
recv_data1= Lisclient_socket.recv(1024)
print('客户端接收到的第一次服务器的响应为:', recv_data1)
if recv_data1== b'\x06':
# 接收到ACK后发送第二次请求
Lisclient_socket.send(bdata2)
recv_data2= Lisclient_socket.recv(1024)
print('客户端接收到的第二次服务器的响应为:', recv_data2)
# 若服务器返回数据为b'\x06'
if recv_data2== b'\x06':
# 向服务器发送第三次数据
Lisclient_socket.send(bdata3)
# 接收服务器第三次返回的数据
recv_data3= Lisclient_socket.recv(1024)
print('客户端接收到的第三次服务器的响应为:', recv_data3)
# 若服务器返回数据为b'\x06'
if recv_data3== b'\x06':
# 向服务器发送第三次数据
Lisclient_socket.send(bdata4)
# 接收服务器第三次返回的数据
recv_data4= Lisclient_socket.recv(1024)
print('客户端接收到的第四次服务器的响应为:', recv_data4)
if recv_data4== b'\x06':
# 向服务器发送第五次数据
Lisclient_socket.send(bdata5)
# 接收服务器第五次返回的数据
recv_data5= Lisclient_socket.recv(1024)
print('客户端接收到的第五次服务器的响应为:', recv_data5)
if recv_data5== b'\x06':
recv_data5= ''
print(recv_data5)
# todo 关闭socket
Lisclient_socket.close()
l= Lis.LisOrder()
网友评论