C插座问题



我正在运行一个客户端,该客户端从命令行发送了一个时区,并且一个测试服务器(我们知道有效),返回该时区的日期和时间。但是,正确地返回时区后,它会出现。

以下是我的客户端代码:

int main(int argc, const char * argv[]){
char buf[kBufSize+1];
char line[128];
ssize_t n;
int i;
int more;
int x = 0; 
int sockFD;
int port;
struct sockaddr_in sad;
struct hostent *ptrh;
sockFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
memset(&sad, 0, sizeof(sad));                 /* Sets every byte of the address to be zero */
  sad.sin_family = AF_INET; 
/* Look up name */
ptrh = gethostbyname(argv[1]);
memcpy(&sad.sin_addr, ptrh->h_addr, ptrh->h_length);
/* Set port */
//sscanf(argv[2], "%d", &port);
port = atoi(argv[2]);
//printf("%d",port);
sad.sin_port = htons(port);
int clifd = connect(sockFD, (struct sockaddr *)&sad, sizeof(sad));
if(clifd < 0) {
    printf("[ERROR]: Error Connecting...n");
    return 0;
}
printf("Number of args: %dn", argc);
x = 3;
    //printf("Value of x: %dn", x);
    //printf("[DEBUG]: Value of X: %dn", x);
    //printf("[DEBUG]: Line: %sn", line);
    do
    {
        /* Read input line */
        do
        {
            more = 1;
            n = read(sockFD, buf, kBufSize);
            buf[n] = ''; // BUF IS READ FROM THE SERVER
            if(n <= 0)
                break;
            for(i = 0; i < n; i++)
            {
                if(buf[i] == 10)
                {
                    more = 0;
                    break;
                }
            }
            printf("%s", buf);
            if (buf == "BYErn"){
                printf("Closingn");
                exit(1);
            }
        } while(more);
        if(n <= 0)
        {
        break;
        }
        strcpy(line, argv[x]);
        strcat(line, "rn"); // LINE IS SENT TO THE SERVER
        //printf("[DEBUG] Being sent: %s", line);
        write(sockFD, line, strlen(line));
        //printf("%d", n);
        //printf("Value of x: %dn", x);
        x++;
    } while (n != 0 && x <= argc);
   close(sockFD);
   return 0;
}

argv数组从0到argc-1,但是您从3到argc使用了argv。查看循环时外部DO/外部的状况。

最新更新