永发信息网

我在用到recv()这个函数时,里面的第二个参数是char型变量的,值的范围在-127到+127之间,

答案:4  悬赏:70  手机版
解决时间 2021-12-23 21:33
  • 提问者网友:战皆罪
  • 2021-12-23 09:50
如果我要装一个大于127的数据在里面怎么办??
最佳答案
  • 五星知识达人网友:我住北渡口
  • 2022-01-10 00:09
楼主你好。
既然参数是char类型,那么这个参数的大小就固定为1个字节,这一个字节能存储的数据只能有-128到+127。
除非你改变recv这个的第二个参数的类型,否则不可能输入大于127的数据,即使输入大于127的数据,也会被截取为一个字节的数据。
全部回答
  • 1楼网友:从此江山别
  • 2022-01-10 01:57
m/m/
  • 2楼网友:几近狂妄
  • 2022-01-10 00:52
如果recv是自定义函数,可以改变char类型为int类型,这样既不妨碍你使用负数部分,也能兼容你现在的要求。
  • 3楼网友:街头电车
  • 2022-01-10 00:32
int recv( SOCKET s, char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据。 该函数的第一个参数指定接收端套接字描述符; 第二个参数指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据; 第三个参数指明buf的长度; 第四个参数一般置0。 这里只描述同步Socket的recv函数的执行流程。当应用程序调用recv函数时,recv先等待s的发送缓冲中的数据被协议传送完毕, 如果协议在传送s的发送缓冲中的数据时出现网络错误,那么recv函数返回SOCKET_ERROR,如果s的发送缓冲中没有数据或者数据 被协议成功发送完毕后,recv先检查套接字s的接收缓冲区,如果s接收缓冲区中没有数据或者协议正在接收数据,那么recv就一直 等待,直到协议把数据接收完毕。当协议把数据接收完毕,recv函数就把s的接收缓冲中的数据copy到buf中(注意协议接收到的数据 可能大于buf的长度,所以在这种情况下要调用几次recv函数才能把s的接收缓冲中的数据copy完。recv函数仅仅是copy数据,真正的 接收数据是协议来完成的),recv函数返回其实际copy的字节数。如果recv在copy时出错,那么它返回SOCKET_ERROR;如果recv函数在等待协议接收数据时网络中断了,那么它返回0。 注意:在Unix系统下,如果recv函数在等待协议接收数据时网络断开了,那么调用recv的进程会接收到一个SIGPIPE信号,进程对该信号的默认处理是进程终止。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯