Di c, bagaimana cara menjaga server tetap aktif saat saya menutup klien? (anggap server hanya menangani 1 klien pada satu waktu).

Saya melakukan sesuatu seperti ini:

Server.c

while(1)
{
    newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
    while ((strcmp(buffer, "quit\n") != 0)
    {
        .....
    }
    close(newsockfd);
}

Ide saya adalah, ketika klien menerima perintah "keluar", ia mengirimkannya ke server, dan ketika server mendapatkannya, loop kedua terputus. Dan menunggu klien berikutnya. Koneksi pertama saya berfungsi dengan baik, tetapi koneksi kedua tidak berfungsi. Dapatkah seseorang menjelaskan mengapa? Atau adakah cara yang lebih baik untuk melakukan itu?

Contoh spesifik akan lebih baik. Terima kasih sebelumnya.

c
1
zhangdi 12 Maret 2017, 05:02

2 jawaban

Jawaban Terbaik

(oke, komentarnya sudah terlalu panjang...)

Hapus buffer sebelum loop while dalam:

// ... setup, including bind listen ...
while(1)
{
    newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
    buffer[0] = 0; /* very important so we don't see data from previous clients */
    while ((strcmp(buffer, "quit\n") != 0)
    {
        .....
    }
    close(newsockfd);
}
// ... shutdown, including close(sockfd)
2
Rob Starling 12 Maret 2017, 02:25

Sebelum mengulang kembali ke atas loop while(1), kosongkan buffer[] ke semua byte NUL, mungkin dengan:

memset( buffer, '\0', sizeof( buffer ) );

Jika tidak, "keluar\n" masih dalam buffer sehingga kode tidak akan pernah memproses klien kedua (dan yang lebih baru)

0
user3629249 14 Maret 2017, 03:03