socket实现ftp协议客户端时
先
s = socket(AF_INET, SOCK_STREAM, 0);
sendBuf="USER "+userName+"\r\n";
//发送给服务器
send(s,sendBuf.c_str(),sendBuf.size(),0);
然后等待服务器返回信息
//接受服务器返回的信息
reLen=recv(s,buffer,100,0);
buffer[reLen]=0;
cout<<"size"<
recv函数flag = 0的模式工作,如果没有读到数据它将一直阻塞,我希望在10秒后还没读到数据就终止recv函数,可能吗? 如果可能,怎么实现呢?:shock:
/*str[1024]*/ while(recv(sock,str,1024,0)>0) {printf("%s",str);bzero(str,1024);fflush(stdout);} 就上面这个其实我不用循环一次也能读完,但用如果一次不能读完(str[10]的时候),while的时候读完所有内容后就一直阻塞着,这是为什么啊 当读完了recv不是返回0吗?应该自动跳出循环啊 我是新手,请大家指教。
刚刚开始学习socket :oops: :oops: :oops: read write 与 recv send 的 区别是非阻塞 与 阻塞吗?
如题,谢谢! [ 本帖最后由 yjh777 于 2006-10-26 15:40 编辑 ]
这几天写的一个telnet客户端类, 这个类被别的程序调用, 跟server发命令并取结果.所有的操作都不能无限时等待. 所以必须加时间控制, 可是出现了一些怪问题 程序没有设置阻塞时, 一切正常, 只是有些地方会一直等下去, 无法响应用户操作.但 1. 用setsockopt将recv的timeout设为一秒(就是SO_RCVTIMEO选项), 可以在windows下正常工作, 不过在unix下, 这句一直返回-1, error为EINTR. 我用while来一直setsockopt, 每次返回值都是这样, 而...
我将buf设得很大,为什么一次还是接收不完
[code]
#include
linux 下使用多线程进行accpet 在连接上之后使用 recv接收客户端发来的数据 此时如何判断recv是否超时?注:是否可以给每个线程使用 alarm?
这是根据自己的笔记整理的,如有错误,欢迎指出来. tcp协议本身是可靠的,并不等于应用程序用tcp发送数据就一定是可靠的.不管是否阻塞,send发送的大小,并不代表对端recv到多少的数据. 在阻塞模式下,send函数的过程是将应用程序请求发送的数据拷贝到发送缓存中发送并得到确认后再返回.但由于发送缓存的存在,表现为:如果发送缓存大小比请求发送的大小要大,那么send函数立即返回,同时向网络中发送数据;否则,send向网络发送缓存中不能容...