简单的TCP / IP客户端无法按预期工作

时间:2018-02-01 19:20:29

标签: c++ sockets client tcp-ip

我正在尝试编写一个非常基本的TCP / IP客户端,它只需要用户输入,将该输入发送到指定的IP,然后读取输出。下面的代码不返回任何错误代码,但输出仍未按预期返回。例如,我正在测试它的设备应该如下响应:

  

这里有一些输出   
>

最后一个“>”设备将其返回给客户端以表示它已准备好接收更多输入。但是,使用我的代码返回的所有内容都是“>”。更奇怪的是,它只会在每个其他命令上返回该字符,其中之间没有返回任何内容。我怀疑这与我如何处理缓冲区有关;阅读CR和/或LF字符时可能存在冲突?有问题的设备可以通过telnet(同一台机器,同一个端口)完美地工作,而且我不确定我在这里做的不同。如果我能提供任何进一步的信息可以澄清我的问题,请告诉我。

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netdb.h>

int ethwrite(char hostname[], int portno)
{
    int sockfd, n; // file descriptor, number of chars
    struct sockaddr_in serv_addr; // device address
    struct hostent *server; // pointer to host object
    char buffer[256];

    while(true)
    {
        // open socket
        sockfd = socket(AF_INET, SOCK_STREAM, 0);
        if (sockfd < 0) return -1; // couldn't open socket

        // parse host name
        server = gethostbyname(hostname);
        if (server == NULL) return -2;// host not found

        // zero the server address array and parse
        bzero((char *) &serv_addr, sizeof(serv_addr));
        serv_addr.sin_family = AF_INET;
        bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length);

        // connect to server
        serv_addr.sin_port = htons(portno);
        if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)
            return -3; // couldn't connect

        printf("Input: ");
        bzero(buffer,256);
        fgets(buffer,255,stdin); // take user input and write to buffer

        // write command to socket
        n = write(sockfd,buffer,strlen(buffer));
        if (n < 0) return -4; // couldn't write to socket

        // zero the buffer and read from the socket
        bzero(buffer,256);
        n = read(sockfd,buffer,255);
        if (n < 0) return -5; // couldn't read socket

        printf("Output: %s\n",buffer);

        close(sockfd); // close socket
    }
    return 0;
}

int main()
{
    int status = ethwrite((char *)"10.13.70.230", 23);
    printf("Returned status: %i\n",status);
    return status;
}

0 个答案:

没有答案