Socat在最后发送响应而不是正确的顺序

时间:2018-05-24 10:48:03

标签: c debugging socat

我正在尝试使用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;
}

0 个答案:

没有答案