c - C语言的socket编程问题

标签 c sockets

从下面的代码中,为什么我收到了 Reading Socket 响应

int Read(int sock, char *p, int size)
{
    int remain, read=0;

    remain = size;
    while (remain > 0 ) {

        if ((read = recv(sock, p, remain, 0)) < 0) {

            /* Error */
            return(read);
         } else if (read == 0 || *p == 0x0a) {

            /* EOF */
            break;
        }
        remain -= read;
        p += read;
    }

    return(size - remain);
}



while (!done)
{
    printf("***Reading  Socket for response***");
    rsplen= Read(myVsHandle.sock,(char *)encXMLResponse,MAX_RSP_LEN);
    if (rsplen < 0 )
    {
        printf("Internal Communication Error");
        return -1;
    }
    else if (rsplen >0)
        printf("Revieved response");
        done++;
        return 0;
    else if (rsplen == 0)
    {
        printf("Reading socket");
    }

最佳答案

您正在等待MAX_RSP_LEN要读取的字节 - 是否有那么多字节要读取?也许您的进程陷入阻塞 read() .

还取决于您的套接字类型 recv()从中,无法保证您将读取的数据量,因此专门寻找值 0x0a可能不起作用。

关于c - C语言的socket编程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2295122/

相关文章:

python - 在python3中使用现有的父类(super class)实例初始化子类

c - Ruby 客户端无法从 C 服务器读取 : socket. 挂起

冲突类型错误

c - 如何从C程序向Linux中的控制台发送广播消息

c - 读取位置位置 0x1D5C4C2F 访问冲突

c - malloc 分配的指针的大小

Java 网络序列化在可序列化对象上失败

c - 无法理解如何在 Linux 中配置 Eclipse Paho C 客户端

java - HttpURLConnection 连接重置错误处理

c# - 来自 Xamarin 应用程序的第二次 api 调用失败(第一次调用总是返回正常)