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
?
只是給我的問題添加了一點細節。如果用戶鍵入STOP,則服務器發送給客戶端BYE並結束。顯然,客戶端閱讀這條消息,然後關閉連接 – user1974646
@WhozCraig,可怕的縮進會誤導你。這是一個'do {} while()'循環。 – ugoren
你的意思是你不知道如何從TCP套接字讀取?從這裏開始http://beej.us/guide/bgnet/ –