我正在尝试使用socat作为服务器运行程序,这是一个非常简单的程序,但我没有按正确的顺序接收数据。我只在收到数据时才收到服务器响应,而且顺序不正确。
程序:
#include <stdio.h>
int main(int argc, char *argv[]){
char buff[64];
char t[10];
printf("Welcome\n");
gets(t);
printf(t);
printf("\n");
gets(buff);
return 0;
}
当我和socat一起跑:
服务器:
$ socat -v tcp-listen:4444,reuseaddr,fork exec:"./test"
> 2018/05/24 10:33:42.102445 length=2 from=0 to=1
a
> 2018/05/24 10:33:42.582042 length=2 from=2 to=3
a
< 2018/05/24 10:33:42.583721 length=10 from=0 to=9
Welcome
a
$ socat -v tcp-listen:4444,reuseaddr,fork exec:"./leak"
> 2018/05/24 10:39:02.551405 length=7 from=0 to=6
FOOBAR
> 2018/05/24 10:39:03.511667 length=5 from=7 to=11
LALA
< 2018/05/24 10:39:03.512021 length=15 from=0 to=14
Welcome
FOOBAR
客户端:
$ nc 192.168.2.230 4444
FOOBAR
LALA
Welcome
FOOBAR
显然,当我作为程序运行时,它可以正常工作。
$ ./test
Welcome
FOOBAR
FOOBAR
:)
可能会发生什么?我错过了任何争论吗?
解
添加setbuf(stdout, 0)
;在第一次printf之前
#include <stdio.h>
int main(int argc, char *argv[]){
setbuf(stdout, 0);
char buff[64];
char t[10];
printf("Welcome\n");
gets(t);
printf(t);
printf("\n");
gets(buff);
return 0;
}