我在C(使用nanomsg),其應使用Python腳本(使用標準的 '插座' 實現)通信經由TCP創建套接字服務器C代碼(沒有錯誤處理):Socket連接
#include <nanomsg/nn.h>
#include <nanomsg/pair.h>
...
char buf[23];
...
socket = nn_socket(AF_SP, NN_PAIR);
nn_bind(socket, "tcp://127.0.0.1:xxxxx");
...
nn_recv(socket, buf, sizeof(buf), 0);
...
nn_shutdown(socket, endpoint_id);
的Python代碼:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1", xxxxx))
s.send('Hello C this is Python')
s.close()
連接到插座時(如果C應用程序正在運行)沒有錯誤在Python。但是,C腳本在方法nn_recv中空轉,並且根本沒有獲取任何數據。我究竟做錯了什麼?
首先,我在shell中啓動C代碼(它在方法nn_recv中空閒)。然後,我在另一個shell中啓動Python,並期望C應用程序接收數據。這兩個腳本執行沒有錯誤。
確定插座匹配的類型?不應該都是SOCK_STREAM或NN_PAIR。在不同的ZeroMq中,套接字只是等待連接,直到合適的套接字變爲可用。 – hetepeperfan 2015-02-11 14:01:37
研究圖書館的文檔,看起來'nn_socker'必須具有'NN_PULL'標誌用於這種特殊情況。 – Matt 2015-02-11 14:01:37
在'「tcp://127.0.0.1:xxxxx」'中,是否將'xxxxx'識別爲有效的端口?它應該是10000? – ryyker 2015-02-11 15:07:06