关于windows下socket编程的recv函数

问题描述

关于windows下socket编程的recv函数

Talk is cheap,show me the code.
do{

memset(buf, 0, BUFSIZ);

strLen = recv(reads.fd_array[i], buf, BUFSIZ - 1, 0);

                    if (strLen == 0 || strLen == -1){
                        FD_CLR(reads.fd_array[i], &reads);
                        closesocket(cpyReads.fd_array[i]);
                        printf("closed client:%d
", cpyReads.fd_array[i]);
                    }
                    else{
                        printf("From %d : %s", cpyReads.fd_array[i], buf);
                        //send(reads.fd_array[i], buf, strLen, 0);
                    }

} while (strLen==BUFSIZ-1);

我设置的BUFSIZ 是10
我在调用recv函数来取客户端发过来的数据时,如果收到的数据长度大于我设置的缓冲大小也就是BUFSIZ 比如发过来的是10个字符 , 那么do while 循环会循环两次,如果我发送过来的正好是9个字符 , 为啥只循环了一次呢。我调试看到 strLen 明明等于BUFSIZ-1 的 , 于是在上面的memset处加的断点,才知道确实是循环了两次, 可是执行到 recv函数的时候 整个循环直接跳出来了,不太明白这里,求大神讲解一下,站等。。。

解决方案

windows socket编程函数(一)
SOCKET编程 & send recv API函数。。。。
socket 中的recv()函数

解决方案二:

跳到do while语句之后执行吗?如果套接字不阻塞,应该在第二次recv时返回0吧,否则应该在recv时阻塞吧。还有一种可能,就是你这段代码是多线程调用的,在当前线程实际是阻塞到recv了,而转到另一个线程执行do while之后的代码。

时间: 2024-09-19 09:16:10

关于windows下socket编程的recv函数的相关文章

msdos-socket-MSDOS下socket编程客户端 socket()函数的errno=123

问题描述 MSDOS下socket编程客户端 socket()函数的errno=123 我在MSDOS下编写了一个socket程序,运行于MSDOS71下是可以对一个服务端仿真建立连接的. 然后将程序放在win98下的msdos运行,在socket()获取套接字时errno返回123,但是我在win98下telnet或ping这个服务端仿真都是可以通的. 是否是因为,我win98下的msdos没有安装network client的原因?这个errno=123具体原因是什么? 解决方案 VC++中

c++-如何在windows下C++编程实现循环发送定长数据包?

问题描述 如何在windows下C++编程实现循环发送定长数据包? 为了对内部网络进行相关测试,所以要用C++编程实现一个循环发包程序,用QT平台进行开发,要发送的数据包都是同样大小,且大小由用户自行设置,用户设置的大小是整个数据包的大小,包括Ip头等等.所以想请问一下这个要用什么实现?rawsocket可以吗? 解决方案 http://www.cnblogs.com/shenck/p/4075141.html

dos6.22下socket编程引用库只有dos_sock.lib一种么?

问题描述 dos6.22下socket编程引用库只有dos_sock.lib一种么? 请问,dos6.22下的socket编程是引用的库是否只有dos_sock.lib一种啊, 没有其他的库么? 解决方案 DOS 下的SOCKET编程 解决方案二: DOS 下的SOCKET编程

Windows下DLL编程技术及应用

摘 要: 本文介绍了DLL技术在Windows编程中的基本运用方法及应用,给出了直接内存访问及端口I/O的两个实用DLL的全部源代码. 关键词: DLL Windows编程 内存访问 I/O 一 .引 言 由于Windows为微机提供了前所未有的标准用户界面.图形处理能力和简单灵便的操作,绝大多数程序编制人员都已转向或正在转向Windows编程.在许多用户设计的实际应用系统的编程任务中,常常要实现软件对硬件资源和内存资源的访问,例如端口I/O.DMA.中断.直接内存访问等等 .若是编制DOS程序

Linux 下Socket编程基础

1. 引言Linux的兴起可以说是Internet创造的一个奇迹.Linux作为一个完全开放其原代码的免费的自由软件,兼容了各种UNIX标准(如POSIX.UNIX System V 和 BSD UNIX 等)的多用户.多任务的具有复杂内核的操作系统.在中国,随着Internet的普及,一批主要以高等院校的学生和ISP的技术人员组成的Linux爱好者队伍已经蓬勃成长起来.越来越多的编程爱好者也逐渐酷爱上这个优秀的自由软件.本文介绍了Linux下Socket的基本概念和函数调用. 2. 什么是So

Linux下socket编程,附带tcp例子

1.网络中进程之间如何通信? 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用(Solaris门和Sun RPC) 但这些都不是本文的主题!我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们解决了这个问

socket编程callBack回调函数的问题!

问题描述 在这个demo里,建了一个服务器端的类ReceiveServerController,创建套接字时如下:CFSocketCreateWithNative(NULL,fd,kCFSocketAcceptCallBack,AcceptCallback,&context);其中回调函数是AcceptCallback,定义如下:staticvoidAcceptCallback(CFSocketRefs,CFSocketCallBackTypetype,CFDataRefaddress,cons

网络编程-利用socket编程,实现windows 和Linux 互相传输数据。

问题描述 利用socket编程,实现windows 和Linux 互相传输数据. 利用socket编程,实现windows 和Linux 互相传输数据.以windows为client 以Linux为server.在windows发送命令过去,将数据传输过去,在Linux上接受.进而在windows上再次发送一条命令过去,在将数据读取回来.大家有什么好的办法. 解决方案 Linux和Windows下socket函数有些许差别,比如socket函数返回值Linux下为int而Windows下为SOC

linux网络编程之socket(十五) UNIX域套接字编程和socketpair 函数

一.UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机 制,就是UNIX Domain Socket.虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是 UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包.计算校验和.维护序号和应答等,只是 将应用层数据从一个进程拷贝到另一个进程.UNIX域套接字与TCP套接字相比较,