一:连接代理服务器
-
C/C++ code
-
if (m_ProxySocket.Create())
if ( ! m_ProxySocket.Connect( " 192.168.0.5 " , 1080 ))
AddString( " 无法连接代理服务器! " );
else
AddString( " 连接代理服务器成功。 " );
else
AddString( " 创建套节字失败! " );
二:
-
C/C++ code
-
BYTE Order[] = { 5 , 1 , 0 };
m_ProxySocket.Send(Order, 3 );
应答:0x05 0x00 正确
三:
-
C/C++ code
-
BYTE Order[ 10 ] = { 5 , 3 , 0 , 1 }; // UDP ASSOCIATE
* (ULONG * ) (Order + 4 ) = inet_addr( " 61.183.220.XX " ); // IP最后一个断用XX代替,实际使用时为一合法IP
* (LPWORD) (Order + 4 + 4 ) = ntohs( 8000 );
m_ProxySocket.Send(Order, 4 + 4 + 2 );
应答:05 00 00 01 C0 A8 00 05 0C B1 即:192.168.0.5:3249 正确
四:发送UDP数据
-
C/C++ code
-
BYTE Order[ 12 ] = { 0 , 0 , 0 , 1 };
* (ULONG * ) (Order + 4 ) = inet_addr( " 61.183.220.XX " );
* (LPWORD) (Order + 4 + 4 ) = ntohs( 8000 );
Order[ 10 ] = 0xFF ; // 我要发送的数据
Order[ 11 ] = 2 ; // 我要发送的数据
m_ComSocket.SendTo(Order, 12 , Port, IP); // Port为在第3步得到的端口:3249,IP为在第三步得到的IP:192.168.0.5
// m_ComSocket的创建方法为:m_ComSocket.Create(0, SOCK_DGRAM);
发完第4步后,m_ComSocket没有收到任何回应!注:不通过代理,直接发送0xFF 0x02到61.183.220.XX:8000是有回应的,可见要么数据没有到达61.183.220.XX:8000,要么数据丢失了。或者是我发的格式不正确,我想问题出在第四步,还请高手指点!谢谢。
---------------------------------------
既然你用udp,m_ComSocket怎么可能有反应呢,只要61.183.220.XX:8000能收到就ok了
楼主的假设是正确的,按理能收到回应。这种问题我没见到过。
我自己解决了,问题在第三步:
-
C/C++ code
-
BYTE Order[ 10 ] = { 5 , 3 , 0 , 1 }; // UDP ASSOCIATE
* (ULONG * ) (Order + 4 ) = inet_addr( " 61.183.220.XX " ); // IP最后一个断用XX代替,实际使用时为一合法IP
* (LPWORD) (Order + 4 + 4 ) = ntohs( 8000 );
m_ProxySocket.Send(Order, 4 + 4 + 2 );
改为:
-
C/C++ code
-
CString SocketAddress;
UINT SocketPort;
m_ComSocket.GetSockName(SocketAddress, SocketPort); // 这是用来接收远程服务器回应的,创建方法:m_ComSocket.Create(0, SOCK_DGRAM);
BYTE Order[ 10 ] = { 5 , 3 , 0 , 1 };
* (ULONG * ) (Order + 4 ) = inet_addr(SocketAddress);
* (LPWORD) (Order + 4 + 4 ) = ntohs(SocketPort);
m_ProxySocket.Send(Order, 4 + 4 + 2 );
其实任何地方不用修改,结果正是我想要的。