-1
我正在運行一個從命令行發送時區和測試服務器(我們知道有效)的客戶端,它返回該時區的日期和時間。但是,返回時區後,正確地說,它會發生段錯誤。C Sockets問題
下面是我的客戶端代碼:
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: %d\n", argc);
x = 3;
//printf("Value of x: %d\n", x);
//printf("[DEBUG]: Value of X: %d\n", x);
//printf("[DEBUG]: Line: %s\n", line);
do
{
/* Read input line */
do
{
more = 1;
n = read(sockFD, buf, kBufSize);
buf[n] = '\0'; // 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 == "BYE\r\n"){
printf("Closing\n");
exit(1);
}
} while(more);
if(n <= 0)
{
break;
}
strcpy(line, argv[x]);
strcat(line, "\r\n\0"); // LINE IS SENT TO THE SERVER
//printf("[DEBUG] Being sent: %s", line);
write(sockFD, line, strlen(line));
//printf("%d", n);
//printf("Value of x: %d\n", x);
x++;
} while (n != 0 && x <= argc);
close(sockFD);
return 0;
}
調試器,使用一個:) – KevinDTimm
「* it segfaults。*」此外,英語語言依賴於上下文。 – alk
你不能在C中比較字符串'buf ==「BYE \ r \ n」'使用'strcmp()'。 – alk