socket数据收发的问题,在线等 异步socket,发送端循环发送数据包,接收端能不能循环得到数据包啊?如果不能,应该怎么样实现呢?多谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我用的是select(),不知为什么总是得到第一个数据包??? 接收端: for(;;) { int aaaa = getsockopt(c_socket, SOL_SOCKET, SO_ERROR, (char *) &error2, &len2); if (aaaa == -1) { TRACE("SOCKET is closed!\n"); return 0; } FD_ZERO(&fdread); FD_SET(c_socket, &fdread); tv.tv_sec = 2; tv.tv_usec = 0; switch(select(0, &fdread, NULL, NULL, &tv)) { case 0: TRACE("No Read!\n"); break; case -1: TRACE("Time Out!\n"); break; default: if(FD_ISSET(c_socket, &fdread)) { int len = recv(c_socket, m_buffer, ZAM_SIZE, 0); }发送端: while(len1 > 0) { len2 = len1 > ZAM_SIZE ? ZAM_SIZE : len1; fseek(stream, i * ZAM_SIZE, SEEK_SET); fread(m_buffer.pData, sizeof(char), len2, stream); m_buffer.Dataleng.pointlen = i * ZAM_SIZE; m_buffer.DataType = FileMsg->fileType; log.nl.pointlen = i * ZAM_SIZE; if(select(0, NULL, &writefds, NULL, &tv) > 0) { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ int aa = send(so, (char *) &m_buffer, len2, 0); /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ TRACE("数据包已发送!\n"); } 为什么循环发送,在接收端不能够循环得到呢?是不是要加什么控制? AfxBeginThread 线程问题 请大家帮忙,急! 菜单栏重绘问题,80分给最佳答案 getElementsByTagName效率问题 *.rc 资源文件未找到,大家帮我看看怎么回事 如何在对话框上画图? 关于宏RUNTIME_CLASS的问题 贡献 关于system wide hook的疑问? 关于VC的一个简单问题 急需一重要解密软件!解*.PWL中的拨号网络密码!还往高手指教! 急:ado连接SqlServer2005报错“灾难性故障,错误号:8000ffff” 关于gdi的奇怪问题
for(;;)
{
int aaaa = getsockopt(c_socket, SOL_SOCKET, SO_ERROR, (char *) &error2, &len2);
if (aaaa == -1)
{
TRACE("SOCKET is closed!\n");
return 0;
}
FD_ZERO(&fdread);
FD_SET(c_socket, &fdread);
tv.tv_sec = 2;
tv.tv_usec = 0;
switch(select(0, &fdread, NULL, NULL, &tv))
{
case 0:
TRACE("No Read!\n");
break;
case -1:
TRACE("Time Out!\n");
break;
default:
if(FD_ISSET(c_socket, &fdread))
{
int len = recv(c_socket, m_buffer, ZAM_SIZE, 0);
}
发送端:
while(len1 > 0)
{
len2 = len1 > ZAM_SIZE ? ZAM_SIZE : len1;
fseek(stream, i * ZAM_SIZE, SEEK_SET);
fread(m_buffer.pData, sizeof(char), len2, stream);
m_buffer.Dataleng.pointlen = i * ZAM_SIZE;
m_buffer.DataType = FileMsg->fileType;
log.nl.pointlen = i * ZAM_SIZE;
if(select(0, NULL, &writefds, NULL, &tv) > 0)
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
int aa = send(so, (char *) &m_buffer, len2, 0);
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
TRACE("数据包已发送!\n");
}
为什么循环发送,在接收端不能够循环得到呢?是不是要加什么控制?