2013-01-13 181 views
1

我寫了這個:從客戶端發送一個字符串到服務器

客戶:

printf("\nType a string: (STOP to ending connection)\n\n"); 
do{ 
    while ((c = getchar()) != '\n' && i < MAXLENGHT){ 
    buf[i++] = c; 
} 
buf[i] = '\0'; 
len = strlen(buf); 
} 
while(strcmp(buf,"STOP")!=0); 
close(sockfd); 
exit(0); 
} 

服務器:

int main (int argc, char **argv) { 
int sock, fd; 
socklen_t client_len; 
struct sockaddr_in server, client; 


if ((sock = socket (AF_INET, SOCK_STREAM, 0)) == -1) { 
    perror ("Socket failed"); 
    exit (1); 
} 

server.sin_family = AF_INET; 
server.sin_addr.s_addr = htonl(INADDR_ANY); 
server.sin_port = htons (SERVER_PORT); 


if (bind (sock, (struct sockaddr *) &server, sizeof server) == -1) { 
    perror ("bind failed"); 
    exit (2); 
} 

listen (sock,1); 


    while (1) { 
    client_len = sizeof (client); 
    if ((fd = accept (sock, (struct sockaddr *) &client, &client_len)) < 0) { 
     perror ("accepting connection"); 
     exit(3); 
    } 
    fprintf (stderr, "\nOpen.\n"); 
    send (fd, "\nWelcome!\n", 50, 0); 
    check_stats (fd, fd);} 

    close(fd); 
    fprintf (stderr, "\nClose\n"); 
    exit (0); 


} 

void check_stats(int in, int out) 

是服務器接收到的字符串,做一些事情,併發送回客戶端的功能。 我的問題是: 在服務器的代碼,我有什麼之前

close(fd) 

,當用戶鍵入「STOP」,服務器端,但在結束之前,它會發送另一個BYE字符串,客戶端放?我遇到了問題

recv(int sockfd, void *buf, size_t len, int flags); 

功能。我必須在我的主要,因爲

int sockfd 

+0

只是給我的問題添加了一點細節。如果用戶鍵入STOP,則服務器發送給客戶端BYE並結束。顯然,客戶端閱讀這條消息,然後關閉連接 – user1974646

+0

@WhozCraig,可怕的縮進會誤導你。這是一個'do {} while()'循環。 – ugoren

+0

你的意思是你不知道如何從TCP套接字讀取?從這裏開始http://beej.us/guide/bgnet/ –

回答

0

sockfd是指您用來與服務器通信的套接字。這裏是函數原型:ssize_t recv(int sockfd,void * buf,size_t len,int flags);

如果你考慮一下,你會看到如果你沒有提供你正在使用的套接字的函數,那麼它會怎麼知道在哪裏獲取數據?

相關問題