【问题标题】:error when connecting server and using system function in c连接服务器并在c中使用系统功能时出错
【发布时间】:2015-07-21 16:03:59
【问题描述】:

我是 c 的新手,尤其是套接字,如果这个问题很愚蠢,我很抱歉。这是我的代码:

/****************** SERVER CODE ****************/

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>

int main(){
    int welcomeSocket, newSocket;
    char buffer[1024];
    struct sockaddr_in serverAddr;
    struct sockaddr_storage serverStorage;
    socklen_t addr_size;

    welcomeSocket = socket(PF_INET, SOCK_STREAM, 0);
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(7891);
    serverAddr.sin_addr.s_addr = 0;
    memset(serverAddr.sin_zero, '\0', sizeof(serverAddr.sin_zero));  
    bind(welcomeSocket, (struct sockaddr *) &serverAddr,
         sizeof(serverAddr));


    if(listen(welcomeSocket,5)==0)
        printf("Listening\n");
    else
        printf("Error\n");

    addr_size = sizeof serverStorage;
    newSocket = accept(welcomeSocket,
                      (struct sockaddr *) &serverStorage, &addr_size);


    strcpy(buffer,"Hello World\n");
    send(newSocket,buffer,13,0);
    memset(buffer, '\0', 1024);

    while(recv(newSocket, &buffer, 1024, 0) > 0)
    {
        printf("%s", system(buffer));
        memset(buffer, '\0', 1024);
    }

    return 0;
}

这是我的服务器,我正在使用 telnet 连接(我知道它不安全,让任何用户在服务器中执行任何命令都不是,但它是出于教育目的)。当我输入“ls”(服务器程序在 linux 上运行)时,它给了我这个错误 not found 分段错误(核心转储)并断开我的连接。我希望你能帮忙。谢谢

【问题讨论】:

  • 系统返回一个整数,没有字符串。 linux.die.net/man/3/system
  • 如果我想在输入 ls 时看到结果,如何编辑代码?

标签: c sockets serversocket


【解决方案1】:

你的程序因为这行而崩溃:

printf("%s", system(buffer));

如此处所述:http://linux.die.net/man/3/system system() 调用返回一个整数,而不是 char*。

对于您想要的,您可以使用popen()。 例如,请参阅此问题的答案: How to execute a command and get output of command within C++ using POSIX? 或者 How to get the output of grep in C

【讨论】:

  • pastebin.com/jGRj9Ffm 在这里我用 ls 尝试过,但它给了我一个错误提示“:未找到”
  • 我建议您使用调试器,看看您从客户那里收到了什么。您收到的字符串 \0 是否已终止?它是否以 \r 和/或 \n 结尾?如果是这样,请将其删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
  • 2016-07-03
  • 2015-05-16
相关资源
最近更新 更多