繁体   English   中英

TCP Server C ++ / Unix命令行

[英]TCP Server C++/Unix commandline

我正在用C ++对TCP服务器进行编程,这是我第一次这样做。 我遇到的问题似乎是strcmp函数的strcmp 我已经建立了服务器,然后派生了我的进程并运行子进程的请求。 这很好。 由于某些原因,当我输入GET /stuff/ ,它将不接受GET并自动显示错误消息"Invalid first argument" 我没有空间问题,那怎么办? 任何想法都非常感谢。

void processClientRequest(int connSock, struct sockaddr_in echoclient) //char *argv[] )
{
    char buffer[256];
    unsigned int recieved, count = 0;

    if ((recieved = read(connSock, buffer, 256)) < 0) { //read a message from the client
            perror ("Failed to recieve message");
            exit (EXIT_FAILURE);
    }

    buffer[recieved] = '\0'; //ensure string is terminated
    chomp(buffer); //remove trailing \r and \n

    if (write(connSock, buffer, recieved) != recieved) {
            perror ("Mismatch in number of echo'd bytes");
            exit(EXIT_FAILURE);
    }

    // prepare argv array of strings
    char *argv[] = { (char*)0, (char*)0, (char*)0, (char*)0, (char*)0, (char*)0, (char*)0 };

    // parse command into words
    for (char *p = strtok(buffer, " "); p; p = strtok(NULL, " "))
            {   argv[count] = p;
                    count++;
            }

    cout << "THIS IS ARGV[0]" << argv[0] << endl; //debugging, for some reason will not print

    if (strcmp (argv[0], "GET") == 0)
            GET(connSock, argv[1]);

    else if (strcmp(argv[0], "INFO") == 0)
            INFO();

    else
    {
            perror("Invalid first argument!");
            exit(EXIT_FAILURE);
    }

    // run command and its arguments via execvp
    /*      if (execvp(argv[0], argv) < 0) {
            perror("exec in child after fork");
            exit(EXIT_FAILURE);
            }*/

    cerr << "Client(" << inet_ntoa(echoclient.sin_addr) << ") sent: " << buffer << endl;

}

read功能不接收消息,它接收字节。 如果您希望收到邮件,你这样做, 必须写一个函数来接收他们。 这就需要遵循HTTP协议的规则,以保持接收字节,直到您收到整个消息为止,无论是一行,整个标头还是其他内容。

这可能已经被说了数千遍了,“ TCP是一种可靠的字节流协议,不会保留应用程序消息的边界。” 在您100%理解TCP是什么之前,请不要编写使用TCP的代码。 它将永远无法正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM