多网卡网络编程客户端的困惑

xiongkw 2016-07-27 10:51:11
最近在做一个项目时,一台电脑上使用了两个网卡,一个与PLC通信(192.168.1.240),
一个与oracle11g服务器连接(192.168.10.101),分别指定了IP。
我用winsock编写的客户端,在把oracle服务器的网卡给禁用,与PLC通信是可以的,PLC是服务端(192.168.1.25),客户端可以连接。但把oracle服务器的网卡给启用,我的客户端就不能和PLC建立连接了。这个问题困挠了我几天,实在不知道是怎么回事,以上情况,我用TCP调试助手是没有这内问题的!
单步跟踪是到了红色字的位置就返回FALSE。请教各位大师了。。。。。。
	// 如果socket已经打开
if ( IsOpen() )
return false;

SOCKADDR_IN sockAddr = { 0 };

//创建一个socket
SOCKET sock = socket(nProtocol, nType, 0);
if (INVALID_SOCKET != sock)
{
// 让socket绑定一个地址
TCHAR strHost[HOSTNAME_SIZE] = { 0 };
if (false == CSocketComm::GetLocalName( strHost, sizeof(strHost)/sizeof(TCHAR)))
{
closesocket( sock );
return false;
}
//AfxMessageBox(strHost);
sockAddr.sin_addr.s_addr = htonl( CSocketComm::GetIPAddress( strHost ) );
sockAddr.sin_family = nProtocol;

if ( SOCKET_ERROR == bind(sock, (LPSOCKADDR)&sockAddr, sizeof(SOCKADDR_IN)))
{
closesocket( sock );
return false;
}

// 获得目标地址
if ( strDestination[0]) {
sockAddr.sin_addr.s_addr = htonl(CSocketComm::GetIPAddress( strDestination ) );
}

// 获得端口
sockAddr.sin_port = htons( GetPortNumber( strServiceName ) );
if ( 0 != sockAddr.sin_port )
{
// 连接服务器
if (SOCKET_ERROR == connect( sock, (LPSOCKADDR)&sockAddr, sizeof(SOCKADDR_IN)))
//到了这一步就 return false;
{
closesocket( sock );
return false;
}

// 保存socket
m_hComm = (HANDLE) sock;
return true;
}
}
return false;












9
...全文
764 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenyi0106 2016-07-29
  • 打赏
  • 举报
回复
多网卡一般全1的广播有问题,有时候路由出去的地址不是你要播出去的地址; 但是单播只要有路由,都不会存在问题,出问题一般都是你路由不存在(没有相应网段的IP地址或者没插网线)
shenyi0106 2016-07-29
  • 打赏
  • 举报
回复
ipconfig /all 贴出来看看
xiongkw 2016-07-28
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
WSAGetLastError的返回值是什么?
10060
Eleven 2016-07-28
  • 打赏
  • 举报
回复
WSAGetLastError的返回值是什么?
wushuang443 2016-07-28
  • 打赏
  • 举报
回复
这个还是自己加点日志调试看看。因为你说用tcp调试助手是没问题的。那就说明你的代码可能有问题,tcp写客户端按理就那些代码。在看下

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧