socket 传输不能双向通信 socket 用WSAAsyncSelect 方式做的非阻塞通信方式,在局域网 测试 运行正常,但在外网测,只能服务器向客户端发数据,客户端向服务器发的数据服务器收不到,请教一下,这个可能是什么原因造成的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 比如可以先不用selete异步模式,写个很简单的阻塞的请求-应答程序,从外网调,看看能不能行。 用delphi做的socket通信 测试的,网络应该没问题,而且delphi得程序,连接速度 ,好像要比VC这个快的多真郁闷了.. 已经 看到 send函数 的返回值 就是要发送的字节数但是 在服务器端 就是收不到,,FD_READ 收不到啊 发送代码void CServerSocket::SendBuffer(SOCKET &hSocket){ ASSERT(hSocket != NULL); int nSendSize = 0; while (TRUE) { nSendSize = send(hSocket,m_PacketProtocal.pSendBuffer+m_PacketProtocal.sSendBufferInfo.nSendLen,m_PacketProtocal.sSendBufferInfo.nPacketLen-m_PacketProtocal.sSendBufferInfo.nSendLen,0); if (nSendSize > 0) { m_PacketProtocal.sSendBufferInfo.nSendLen += nSendSize; if (m_PacketProtocal.sSendBufferInfo.nSendLen == m_PacketProtocal.sSendBufferInfo.nPacketLen) { m_PacketProtocal.sSendBufferInfo.nSendLen = 0; m_PacketProtocal.sSendBufferInfo.nPacketLen=0; return; } } else if (nSendSize == WSAEWOULDBLOCK ) { PostMessage(m_hWnd,WM_WRITEMSG,2,0); m_strInfoMsg.Format("发送动作SendBuffer出现阻塞,错误信息:%d",WSAGetLastError()); WriteLog("文件传输",m_strInfoMsg,"失败"); return; } else if (nSendSize == SOCKET_ERROR) { m_strInfoMsg.Format("发送SendBuffer出现错误,错误信息:%d",WSAGetLastError()); WriteLog("文件传输",m_strInfoMsg,"失败"); return; } else if (nSendSize == WSAETIMEDOUT) { m_strInfoMsg.Format("发送SendBuffer出现超时错误,错误信息:%d",WSAGetLastError()); WriteLog("文件传输",m_strInfoMsg,"失败"); return; } else if (nSendSize == 0 ) return; }}接受函数 设的断点压根就进不去。。 send函数 的返回值 就是要发送的字节数没有 错误记录 端口有未映射?有未防火墙阻挡? 内网到外网是经过了NAT地址转换的 代码错。if(size == sock_erro){再去getlaster erro,再去判断是否pending.} 嗯,谢谢,这个写法确实 有问题.但是 send发送 值是 大于零的, 但是 接收端 不管 对错,都收不到相关消息 你的hSocket句柄是你用connect()时的句柄吗 TrackBar 自绘 NM_CUSTOMDRAW ? 茫茫书海,何取何去? 建一个如下功能的视图,请问用社么做基类最方便? 可否提供一些基于DLL的二次开发的资料? ★有什么办法知道磁盘上的一个文件比如c:\1.txt是否被打开了? 把一个控件工程移到另一个控件工程时遇到的问题--100分 如何在ATL里面使用FileOpen 对话框? 麻烦进来看看,谢谢 一个很菜的问题,大家快来抢分!!关于文件数组问题!!!!!!!, 大家是不是觉得不过瘾,好进来吧 在vc6中使用NI函数AmpPhaseSpectrum()的问题 急帮忙看下
而且delphi得程序,连接速度 ,好像要比VC这个快的多
真郁闷了..
但是 在服务器端 就是收不到,,FD_READ 收不到啊
{
ASSERT(hSocket != NULL);
int nSendSize = 0;
while (TRUE)
{
nSendSize = send(hSocket,m_PacketProtocal.pSendBuffer+m_PacketProtocal.sSendBufferInfo.nSendLen,m_PacketProtocal.sSendBufferInfo.nPacketLen-m_PacketProtocal.sSendBufferInfo.nSendLen,0);
if (nSendSize > 0)
{
m_PacketProtocal.sSendBufferInfo.nSendLen += nSendSize;
if (m_PacketProtocal.sSendBufferInfo.nSendLen == m_PacketProtocal.sSendBufferInfo.nPacketLen)
{
m_PacketProtocal.sSendBufferInfo.nSendLen = 0;
m_PacketProtocal.sSendBufferInfo.nPacketLen=0;
return;
}
}
else if (nSendSize == WSAEWOULDBLOCK )
{
PostMessage(m_hWnd,WM_WRITEMSG,2,0); m_strInfoMsg.Format("发送动作SendBuffer出现阻塞,错误信息:%d",WSAGetLastError());
WriteLog("文件传输",m_strInfoMsg,"失败");
return;
}
else if (nSendSize == SOCKET_ERROR)
{
m_strInfoMsg.Format("发送SendBuffer出现错误,错误信息:%d",WSAGetLastError());
WriteLog("文件传输",m_strInfoMsg,"失败");
return;
}
else if (nSendSize == WSAETIMEDOUT)
{
m_strInfoMsg.Format("发送SendBuffer出现超时错误,错误信息:%d",WSAGetLastError());
WriteLog("文件传输",m_strInfoMsg,"失败");
return;
}
else
if (nSendSize == 0 )
return;
}}
接受函数 设的断点压根就进不去。。
没有 错误记录
{
再去getlaster erro,再去判断是否pending.
}
但是 send发送 值是 大于零的, 但是 接收端 不管 对错,都收不到相关消息