select-recv返回值问题和在while(recv())的返回值不一样

问题描述

recv返回值问题和在while(recv())的返回值不一样
if ((select(sockfd + 1), &readfd, NULL, NULL, &stime) > 0)
{
    #if 1
    nlen = recv(sockfd, pcBuffer, 199, 0);
    printf("recv num(%d), buffer num(%d).
", nlen, lRecvnum);
    if ((lRecvnum + nlen) < 199)
    {
        lRecvnum += nlen;
        pcBuffer += nlen;
        printf("recv num(%d), buffer num(%d), buffer(%s).
", nlen, lRecvnum, buf);
    }
    #else
    while ((nlen = recv(sockfd, pcBuffer, 199, 0)) > 0)
    {
        printf("recv num(%d), buffer num(%d).
", nlen, lRecvnum);
        if ((lRecvnum + nlen) < 199)
        {
            Recvnum += nlen;
            pcBuffer += nlen;
            printf("recv num(%d), buffer num(%d), buffer(%s).
", nlen, lRecvnum, buf);
        }
    }
    #endif
}

现在想问的是执行上面一段代码,就是#if 1,recv返回的值是正常的,返回值是199跟写到pcBuffer的数据是一样的,但是如果把#if 1改成#if 0,执行下面在
while ((nlen = recv(sockfd, pcBuffer, 199, 0)) > 0)的代码分支的时候,recv的返回值一直是1,但是写到pcBuffer的数据却是正确的,这个是为什么?recv的返回值是1,但是写到pcBuffer中的个数却不是1,而是正确的个数,为什么这个时候的recv不返回不跟#if 1的时候是一样的,也是199?

解决方案

按正确的逻辑
while ((nlen = recv(sockfd, pcBuffer, 199, 0)) > 0)这个应该改为

Recvnum = 0;
while ((nlen = recv(sockfd, pcBuffer, 199- Recvnum, 0)) <199)
{
}

解决方案二:

标准输入cin的返回值以及while(cin>>x)的问题

解决方案三:

tf("recv num(%d), buffer num(%d).
", nlen, lRecvnum);
if ((lRecvnum + nlen) < 199)
{
lRecvnum += nlen;
pcBuffer += nlen;
printf("recv num(%d), buffer num(%d), buffer(%s).
", nlen, lRecvnum, buf);
}
#else
while ((nlen = recv(sockfd, pcBuffer, 199, 0)) > 0)
{
printf("recv num(%d), buffer num(%d).
", nlen, lRecvnum);
if ((lRecvnum + nlen) < 199)

解决方案四:

tf("recv num(%d), buffer num(%d).
", nlen, lRecvnum);
if ((lRecvnum + nlen) < 199)
{
lRecvnum += nlen;
pcBuffer += nlen;
printf("recv num(%d), buffer num(%d), buffer(%s).
", nlen, lRecvnum, buf);
}
#else
while ((nlen = recv(sockfd, pcBuffer, 199, 0)) > 0)
{
printf("recv num(%d), buffer num(%d).
", nlen, lRecvnum);
if ((lRecvnum + nlen) < 199)

时间: 2025-01-29 11:47:43

select-recv返回值问题和在while(recv())的返回值不一样的相关文章

xsd-asp.net中数据集(XSD)使用带OUTPUT值的存储过程时,如何获取返回值?

问题描述 asp.net中数据集(XSD)使用带OUTPUT值的存储过程时,如何获取返回值? 在数据集(XSD)中通过创建TableAdatper使用了带OUTPUT值的现有存储过程,在预览数据时能正确获得返回值的列表显示,但在CS页面中如何通过GetData函数正确获得这些返回值? 也试过创建Query使用了带OUTPUT值的现有存储过程,同样可以正确预览数据但CS中仍然取不到返回值,同样提示"最匹配的重载方法具有一些无效参数": ChargeStdTableAdapters.Que

问下 jsp中 select控件在页面如何显示出已经查询的值呢?

问题描述 <selectname="beginHour"id="beginHour"><optionvalue="00"selected>00<optionvalue="01">01<optionvalue="02">02<optionvalue="03">03<optionvalue="04">

知道复合主键中一个字段属性值,如何得到另一个字段属性值

问题描述 我的复合主键是由2个字段组成的,现在能拿到其中一个字段的值,不知道如何拿到另一个值?小弟诚请各位高手解决,online等!谢谢了 解决方案 上面的发错了,用JDBC和hibernate都可以直接查询,返回的有可能是多条记录.JDBC: select id_a from table1 where id_bhibernate: 一般复合主键映射成一个实体对象如: public class Table1 { private TableId id; private String xxxProp

java-JSP用JAVABEAN传整型值时,如果数值为一位,接收到的值为0,两位以上的值正常。

问题描述 JSP用JAVABEAN传整型值时,如果数值为一位,接收到的值为0,两位以上的值正常. 现象如题,环境为MYECLIPSE和TOMCAT6,代码如下: 提交数据的文件department_add.jsp: <%@ page contentType="text/html" pageEncoding = "GBK"%> <%@ page import="com.lb.teashop.factory.*,com.lb.teashop.

单点登陆系统里保存有session值,模块怎样通过接口访问session值?

问题描述 单点登陆系统里保存有session值,模块怎样通过接口访问session值?项目有这样的需求,用户通过一个登陆框登陆后,可以实现模块间的跳转,那么就需要用session记录登陆状态,但是我发现调用web服务时(返回session值),获取session值时出现堆栈出错,访问不到这个session值,我刚接触webservice,不是怎么了解,希望高手们赐教.... 解决方案 解决方案二:既然是系統,那肯定有開發的接口.解决方案三:webservice能接收session?解决方案四:可

name-使用cookies来获取表单提交的值,一直都只有前面2个值

问题描述 使用cookies来获取表单提交的值,一直都只有前面2个值 使用cookies来获取表单提交的值,一直都只有前面2个值 代码如下 function testcookie(){ additemtocookie("item_name", $("#name").val() ); additemtocookie("item_price", $("#price").val() ); additemtocookie("

servlet-想通过href链接传递文本框的值,该怎么得到文本框的值

问题描述 想通过href链接传递文本框的值,该怎么得到文本框的值 10C 新手刚学习jsp,想写个购物车功能,想问问href传值中想传文本框的值,其中值通过js随时改变了,该怎样把里面个数传到servlet里jsp: <%@ page language=""java"" import=""java.util.*"" pageEncoding=""UTF-8""%><%@

arraylist-急 在线等 谢谢!java想要读取excel中某以特定单元格的值,现在是循环读出所有的值,请帮忙修改一下

问题描述 急 在线等 谢谢!java想要读取excel中某以特定单元格的值,现在是循环读出所有的值,请帮忙修改一下 package com.excel.action; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java

html-获取一个输入框的值,另一个输入框显示另外的值

问题描述 获取一个输入框的值,另一个输入框显示另外的值 现在我有两个输入框,如果我在第一个输入框输入1,则另一个输入框自动输出2, 不需要我自己手动输入,这个怎么弄,求解 解决方案 <input type="text" onblur=" document.getElementById('txtTarget').value = this.value == '1'?2:''" /><input type="text" id=&quo