我在MT4里用socket跟外部程序通信,失败:错误信息如下2015.03.19 09:48:59.000 Script_NET USDJPY,H4: Net Bridge Error: connect() failed: 10051,socket代码是从https://www.mql5.com/en/code/9772下载,我的代码如下: int Buffer[256]; int retval; int loopcount=0; int addr[1]; int socket_type; int server[sockaddr_in]; int hp; int wsaData[WSADATA];
if (Bridge_NET_Protocol=="TCP") { socket_type = SOCK_STREAM; } else if (Bridge_NET_Protocol=="UDP") { socket_type = SOCK_DGRAM; }
retval = WSAStartup(0x202, wsaData); if (retval != 0) { Print("Net Bridge Error: WSAStartup() failed with error "+ retval); return(""); }
if (isalpha(StringGetChar(Bridge_NET_Server,0))) { Print("Net Bridge Error: IP address should be given in numeric form in this version."); return(""); }
addr[0] = inet_addr(Bridge_NET_Server); hp = addr[0];
int Buffer[256];
int retval;
int loopcount=0;
int addr[1];
int socket_type;
int server[sockaddr_in];
int hp;
int wsaData[WSADATA];
//closesocket(conn_socket);
if(handlerName == "" || methodName == "" || Bridge_NET_IsActive == false)
{
return("");
}
if (Bridge_NET_Protocol=="TCP")
{
socket_type = SOCK_STREAM;
}
else if (Bridge_NET_Protocol=="UDP")
{
socket_type = SOCK_DGRAM;
}
retval = WSAStartup(0x202, wsaData);
if (retval != 0)
{
Print("Net Bridge Error: WSAStartup() failed with error "+ retval);
return("");
}
if (isalpha(StringGetChar(Bridge_NET_Server,0)))
{
Print("Net Bridge Error: IP address should be given in numeric form in this version.");
return("");
}
addr[0] = inet_addr(Bridge_NET_Server);
hp = addr[0];
if (hp == 0 )
{
Print("Net Bridge Error: Cannot resolve address \""+Bridge_NET_Server+"\": Error :"+WSAGetLastError());
return("");
}
/*
Print("server:",server[0],server[1],server[2],server[3],",sin_addr:",sin_addr,",addr[0]:",addr[0]);
int2struct(server,sin_addr,addr[0]);
int2struct(server,sin_family,AF_INET);
int2struct(server,sin_port,htons(Bridge_NET_Port));
*/
int2struct(server,sin_family,AF_INET);
Print(AF_INET+" family:"+server[0]+" "+server[1]+" "+server[2]+" "+server[3]+" f:"+sin_family);
if (Bridge_NET_Server=="")
int2struct(server,sin_addr,INADDR_ANY);
else
int2struct(server,sin_addr,addr[0]);
Print(addr[0]+" addr:"+server[0]+" "+server[1]+" "+server[2]+" "+server[3]+" f:"+sin_addr);
int2struct(server,sin_port,htons(Bridge_NET_Port));
Print(htons(Bridge_NET_Port)+" port:"+server[0]+" "+server[1]+" "+server[2]+" "+server[3]+" f:"+sin_port);
//Print("server:",server[0],server[1],server[2],server[3],server[4],",sin_addr:",sin_addr,",addr[0]:",addr[0]);
conn_socket = socket(AF_INET, socket_type, 0);
if (conn_socket <0 )
{
Print("Net Bridge Error: Error Opening socket: Error "+ WSAGetLastError());
return("");
}
Print("ArraySize(server):",ArraySize(server));
Print("ArraySize(server)<<2:",ArraySize(server)<<2);
retval=connect(conn_socket, server, ArraySize(server)<<2);
if (retval == SOCKET_ERROR)
{
Print("Net Bridge Error: connect() failed: ", WSAGetLastError());
return("");
}
ArrayInitialize(Buffer, 0);
str2struct(Buffer,ArraySize(Buffer)<<18,Ext_Operator_MagicNumber+"|"+handlerName+"|"+methodName+"|"+parameters+"|");
retval = send(conn_socket, Buffer, ArraySize(Buffer)<<2, 0);
if (retval == SOCKET_ERROR)
{
Print("Net Bridge Error: send() failed: error ", WSAGetLastError());
return("");
}
ArrayInitialize(Buffer, 0);
retval = recv(conn_socket, Buffer, ArraySize(Buffer)<<2, 0);
if (retval == SOCKET_ERROR)
{
Print("Net Bridge Error: recv() failed: error ", WSAGetLastError());
return("");
}
if (retval == 0)
{
Print("Net Bridge Error: Server closed connection.");
return("");
}