我正在編寫一個C應用程序來連接路由器。路由器不會過濾任何傳入連接,也不會過濾任何防火牆。我的問題是C函數「連接」返回SOCKET_ERROR,但是當發生這種情況時,我得到調用perror的錯誤消息是:沒有錯誤(?)。這可能意味着我正在尋找錯誤的方向(perror從中獲得錯誤信息的地方不是我感興趣的地方)。connect()C函數無法與我的路由器連接,但我可以使用javascript ajax調用
UPDATE:如意見建議,我叫WSAGetLastError(),返回10061(connection refused)
在同一時間,我有與路由器連接的Web應用程序,並通過發送一個JSON消息AJAX呼叫。沒有問題。使用相同的IP和相同的端口進行連接。
如果有幫助,我使用的connect
函數在WinSock2.h中定義。與Windows 7家庭高級版和Visual Studio 2010
工作這些是我所認爲的代碼的相關部分(UPDATE:增加套接字初始化的缺失部分)
// Enters here
#ifdef WIN32
WSADATA wsaData;
int error = WSAStartup(MAKEWORD(2,0), &wsaData);
if(error != 0) return false;
if(LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 0)
{
WSACleanup();
return false;
}
#endif
struct addrinfo hints;
struct addrinfo *m_data;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_socktype = SOCK_STREAM;
// hostname is a char * containing my IP, in the same subnetwork than the router,
// and I'm going to connect with 192.168.90.1 (connection correctly open) and port 5555
port = "5555";
getaddrinfo(hostname, port, &hints, &m_data);
int m_socket = socket(m_data->ai_family, m_data->ai_socktype, m_data->ai_protocol);
// more stuff here
if (connect(m_socket, (struct sockaddr *)m_data->ai_addr, m_data->ai_addrlen) == SOCKET_ERROR)
{
// I get "connection error: no error" here. Why?
perror("connection error");
closesocket(m_socket);
return false;
}
那麼,爲什麼我通過AJAX調用連接,但C連接函數返回SOCKET_ERROR?任何線索?
非常感謝提前
使用'WSAGetLastError'獲取錯誤代碼。 – nwellnhof
獲取10061,根據http://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx表示「連接被拒絕」。但阿賈克斯連接工作正常。 – jorgeas80
添加用於初始化套接字的缺失代碼。 – unwind