微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 strcmp 函数没有将接收到的用户命令与 LIST 进行比较没有 strcmp 函数正在工作

如何解决为什么 strcmp 函数没有将接收到的用户命令与 LIST 进行比较没有 strcmp 函数正在工作

我是套接字编程的新手,我正在编写一个没有客户端的 FTP 服务器 我必须使用 netcat localhost 端口访问服务器

void do_job(int fd)
{
    i,client;
    char command[DEFAULT_BUFLEN];
    while((client =recv(fd,command,strlen(command),0)) >0 )
    {
                
        if (strcmp(command,"LIST") ==0)
        {
        }

在主函数中:

if ((pid=fork()) == 0) {
    close(listenfd);
    do_job(fd);
    printf("Child finished their job!\n");
    close(fd);
    exit(0);
}

解决方法

代码有很多问题。您正在将 strlen 应用于未初始化的数组。这是未定义的行为,在实际操作中可能会返回从 0 到超过数组大小的任何值。

recv 函数从字节流填充缓冲区;它不返回以空字符结尾的字符串,也不从流中提取行。 recv 会很高兴地读取网络输入流的片段,该片段从一个命令的中间开始并在另一个命令的中间结束。

在实际的 FTP 协议中,命令无论如何都不会是以空字符结尾的字符串。

FTP 命令是“Telnet 字符串”,以“Telnet end of 行代码” [RFC 959,4.1.3,P. 34]

基本上整个方法都太简单了,不可行;程序需要对网络输入进行某种字符流抽象,以便正确解析协议。

,

您需要在字符串中添加一个空终止符才能使用 data.table。此外,如果他们输入以换行符结尾的行,则该字符将在 x[,lapply(.SD,function(x) trimws(unlist(tstrsplit(gsub("([TF])+"," \\1",x),",fixed = TRUE,type.convert = TRUE)))),by = .(CHROM,POS,REF,TYPE)] # CHROM POS REF TYPE ALT AF #1: chr1 1 A MISSENSE T 0.23 #2: chr2 1 A MISSENSE T 0.17 #3: chr2 1 A MISSENSE G 0.09 中,因此您需要将其包含在要比较的字符串中。

调用 strcmp() 时,第三个参数应该是您可以在缓冲区中存储的最大数量。 command 返回已在缓冲区中的字符串的长度,但您尚未对其进行初始化。您可以使用 recv() 并减去 1 为将要添加的空终止符留出空间。

strlen(command)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。