Chinaunix
标题:
我用socket编程read的时候出的问题
[打印本页]
作者:
CnkknD
时间:
2003-08-04 19:44
标题:
我用socket编程read的时候出的问题
我想读出所有的信息,可是一直失去相应
void snr(int sockfd,char *cmd,char buf[])
{
int len;
int tmp;
char *p;
char b[1024];
p=buf;
len=strlen(cmd);
send(sockfd,cmd,len,0);
len=0;
while(tmp=recv(sockfd,b,1,0))
//while()
//tmp=recv(sockfd,b,1024,0);
{
printf("%d",tmp);
puts(b);
len+=tmp;
strcpy(p,b);
p=&buf[len];
}
buf[len]='\0';
}
复制代码
我一个字符一个字符的读,到没有信息的时候recv就没有响应了,而根本就不会给tmp赋值,而且b即不是NULL,也不是EOF,我怎么才能把所有的信息全部读出来呢?
作者:
蓝色键盘
时间:
2003-08-04 21:01
标题:
我用socket编程read的时候出的问题
老大,你需要知道长度或者有个措施知道什么时候结束,因为tcp是没有边界的有序字符流。
你这样的话,除非对方close了描述字,或者socket发生了错误,或者被信号中断,或者对方进程异常等。才能让recv返回。
在这个过程中,你可以设置超时,或者干脆用select。
作者:
CnkknD
时间:
2003-08-04 21:06
标题:
我用socket编程read的时候出的问题
我开始是用php编写的,遇到的情况和这个一样,但为什么好多书上的例子都是while(!feof(..))就可以了呢?
比如我用php获取一个ftp所有文件信息
$fp=fopen($this->;server.".".$this->;port,'a');
$i=0;
while (!feof($sock_data)) {
$list[$i++] = ereg_replace("[\r\n]", "", fgets($sock_data, 512));
if($i==100){
fputs($fp,implode("\n", $list));
$i=0;
}
}
fclose($fp);
复制代码
这个程序执行就没有问题
作者:
CnkknD
时间:
2003-08-04 21:34
标题:
我用socket编程read的时候出的问题
谢谢,我用select搞掟了
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2