到远程主机的Python套接字连接未收到响应

到远程主机的Python套接字连接未收到响应,python,api,sockets,fix-protocol,Python,Api,Sockets,Fix Protocol,我正在尝试连接到Spotware修复API。看来服务器只是不想给我回任何数据。我没有收到任何错误,但也没有收到任何响应 import socket import datetime ### 1 Custom variables: ### heartbeat_interval = 30 user = r'1234567' password = r'password' SenderCompID = r'icmarkets.1234567' TargetCompID = r'CSERVER' MsgS

我正在尝试连接到Spotware修复API。看来服务器只是不想给我回任何数据。我没有收到任何错误,但也没有收到任何响应

import socket
import datetime

### 1 Custom variables: ###
heartbeat_interval = 30
user = r'1234567'
password = r'password'
SenderCompID = r'icmarkets.1234567'
TargetCompID = r'CSERVER'
MsgSeqNum = 1
utct = datetime.datetime.utcnow()
SendingTime = utct.strftime("%Y%m%d-%H:%M:%S")


### 2 Constructing Body ###
body = {
'encryption_scheme': r'98=0',
'heartbeat_interval': r'108=%s' %heartbeat_interval,
# 'sequence_reset': r"141=Y",
'username': r"553=%s" %user,
'password': r"554=%s" %password
}
bodyStr = ''
for e in body:
    bodyStr += body[e]+'|'


### 3 Constructing Header ###
header = {
'8-BeginString': r"8=FIX.4.4",
'9-BodyLength':  r"9={message_length}",
'35-MsgType':  r"35=A",
'34-MsgSeqNum':  r"34=%s" %MsgSeqNum,
'49-SenderCompID':  r"49=%s" %SenderCompID,
'57-TargetSubID': r"57=TRADE",
'50-SenderSubID': r"50=TRADE",
'52-SendingTime': r"52=%s" %SendingTime,
'56-TargetCompID': r"56=%s" % TargetCompID,
}
#
headerStr = ''
for e in header:
    headerStr += header[e] +'|'

message = headerStr + bodyStr
message_length = len(message.replace('8=FIX.4.4|', ''))
message = message.replace('{message_length}', str(message_length))


### 4 Calculating checksum ###
# '\x01' or '\u0001'?
arr = bytes(message.replace('|', r'\x01'), 'ascii')

s = 0
for byte in arr:
    s += byte
cs = s % 256

if len(str(cs)) == 2:
    cs = '0%s' % cs

print("Checksum = %s" % cs)

message = message + '10=%s|' %cs
# '\x01' or '\u0001'?
message = message.replace('|', r'\x01')
print(message)


### 5 Sending message ###
message = message.encode('ascii')
print(message)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#  37.48.78.15 or h59.p.ctrader.com
s.connect(("37.48.78.15", 5202))

s.sendall(message)
print(s)
data = s.recv(4096)

print("received message:", data)
我跌倒的可能性越高:

  • 在Python中,应该用“\x01”或“\u0001”替换什么“|”

  • 当我执行“message=message.encode('ascii')”时,我的消息开始显示为双“\”,可以吗


  • 也许你应该问对方他们在日志中看到了什么。大多数情况下,当没有回复时,这与消息被篡改或由于未知的compid有关。
    b'8=FIX.4.4\\x019=135\\x0135=A\\x0134=1\\x0149=icmarkets.1234567\\x0157=TRADE\\x0150=TRADE\\x0152=20201116-18:01:58\\x0156=CSERVER\\x0198=0\\x01108=30\\x01553=1234567\\x01554=password\\x0110=072\\x01'