Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python tcp客户端连接_Python_Tcp_Client - Fatal编程技术网

python tcp客户端连接

python tcp客户端连接,python,tcp,client,Python,Tcp,Client,我正试图通过tcp连接连接到一个交易平台,该平台在我的虚拟机上以java运行 我尝试了以下代码: import socket TCP_IP = 'localhost' TCP_PORT = 5333 BUFFER_SIZE = 1024 MESSAGE = "function=subscribe_portfolio_balance|item="xxxxxxxxxxxxxxxx" s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s

我正试图通过tcp连接连接到一个交易平台,该平台在我的虚拟机上以java运行

我尝试了以下代码:

import socket



TCP_IP = 'localhost'
TCP_PORT = 5333
BUFFER_SIZE = 1024
MESSAGE = "function=subscribe_portfolio_balance|item="xxxxxxxxxxxxxxxx"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE)
data = s.recv(BUFFER_SIZE)
s.close()

print "received data:", data
代码不起作用,当我在终端上运行它时,什么也没有发生,没有错误消息,没有任何消息。。。我在这里做错什么了吗?是否有一种方法来构造代码,以便能够理解错误所在


非常感谢

有几件事可能会导致您的问题:

  • 服务器不喜欢您发送的内容,只会丢弃数据。您的客户端在s.recv(..)等待响应时被阻止-如果服务器没有响应,您的客户端将直接等待
  • 您可能需要刷新客户端套接字,因为数据可能未发送到输出缓冲区中
我建议看一下pythonsockethowto指南

我根据你的脚本做了一个快速测试。这对我来说是可行的,我所做的唯一更改是修复消息字符串的引号

client.py

import socket

TCP_IP = 'localhost'
TCP_PORT = 5333
BUFFER_SIZE = 1024
#note the outer ' around the message
MESSAGE = '"function=subscribe_portfolio_balance|item="xxxxxxxxxxxxxxxx"'

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE)
print "sent data"
data = s.recv(BUFFER_SIZE)
print "recieved"
s.close()

print "received data:", data
import socket

TCP_IP = 'localhost'
TCP_PORT = 5333
BUFFER_SIZE = 1024

# create an INET, STREAMing socket
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# bind the socket to a public host, and a well-known port
serversocket.bind((TCP_IP, TCP_PORT))
# become a server socket
serversocket.listen(5)

while True:
    # accept connections from outside
    (clientsocket, address) = serversocket.accept()
    # now do something with the clientsocket
    data = clientsocket.recv(BUFFER_SIZE)
    print "recieved: " + data
    clientsocket.send(data)
    clientsocket.close()
server.py

import socket

TCP_IP = 'localhost'
TCP_PORT = 5333
BUFFER_SIZE = 1024
#note the outer ' around the message
MESSAGE = '"function=subscribe_portfolio_balance|item="xxxxxxxxxxxxxxxx"'

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
s.send(MESSAGE)
print "sent data"
data = s.recv(BUFFER_SIZE)
print "recieved"
s.close()

print "received data:", data
import socket

TCP_IP = 'localhost'
TCP_PORT = 5333
BUFFER_SIZE = 1024

# create an INET, STREAMing socket
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# bind the socket to a public host, and a well-known port
serversocket.bind((TCP_IP, TCP_PORT))
# become a server socket
serversocket.listen(5)

while True:
    # accept connections from outside
    (clientsocket, address) = serversocket.accept()
    # now do something with the clientsocket
    data = clientsocket.recv(BUFFER_SIZE)
    print "recieved: " + data
    clientsocket.send(data)
    clientsocket.close()

你确定我认为引号太多了吗?至少你必须得到语法错误:无效语法不,没有无效语法消息,如果我直接插入字符串,我会得到语法错误消息函数=subscribe_portfolio_balance | item=“xxxxxxxxxxxxxx”在s.send()中,而不是使用MESSAGE变量。上面的消息是手册中描述的消息,不幸的是用意大利语…您可以像这样转换消息
message='function=subscribe\u portfolio\u balance | item='xxxxxxxxxxxxxx'
,然后看看会发生什么。是的,我做了,我得到了一个语法错误…非常感谢,但仍然不起作用…它只是打印出“发送的数据”它甚至不打印“received”。这是什么意思?可能插座没有连接?我对编程一无所知,但据我所知,应该有两种解释:套接字未连接,消息不正确,我如何理解问题所在?如果您看到“已发送数据”,那么您知道至少您已连接到服务器并发送原始数据。由于您没有看到“Received”,服务器没有向您发送任何数据,客户端只是在等待。为什么会这样取决于交易应用程序——这是您需要调查的。您需要更仔细地查看您的交易平台应用程序。它写日志了吗?你能调试它吗?是否有任何关于输入格式的文档,等等。是的,我访问了java控制台,实际上它收到了一条消息,“RequestReceived from socket client:new thread created”(从socket客户端接收到请求:创建了新线程),然后什么都没有发生,直到我停止python脚本,在java控制台上,我可以看到它实际上响应了我的请求。我想您必须阅读他们关于如何期望外部应用程序通信的文档。也许他们使用了某种回调机制,但这只是猜测。最终,python程序没有问题,您需要了解交易程序是如何通信的。