如何解决为什么 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 举报,一经查实,本站将立刻删除。