到远程主机的Python套接字连接未收到响应
我正在尝试连接到Spotware修复API。看来服务器只是不想给我回任何数据。我没有收到任何错误,但也没有收到任何响应到远程主机的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
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)
我跌倒的可能性越高:
也许你应该问对方他们在日志中看到了什么。大多数情况下,当没有回复时,这与消息被篡改或由于未知的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'