异步socket,发送端循环发送数据包,接收端能不能循环得到数据包啊?
如果不能,应该怎么样实现呢?多谢!

解决方案 »

  1.   

    我用的是select(),不知为什么总是得到第一个数据包???
      

  2.   

    接收端:
    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");
                      }

    为什么循环发送,在接收端不能够循环得到呢?是不是要加什么控制?