2017-11-22 4 views
0

データを送信した後、どのようにCプレーンで接続を切断できますか?ソケットを作成して接続を待つサーバーがあります。接続を取得した後、そのソケットを通してchar配列を送ります。その後、接続を切断し、次の接続を待つことに戻ります。どうやってやるの?データを送信した後のCドロップ接続

int main() 
{ 
char str[100]; 
int listen_fd, comm_fd; 
struct sockaddr_in servaddr; 
listen_fd = socket(AF_INET, SOCK_STREAM, 0); 
bzero(&servaddr, sizeof(servaddr)); 
servaddr.sin_family = AF_INET; 
servaddr.sin_addr.s_addr = htons(INADDR_ANY); 
servaddr.sin_port = htons(22000); 
bind(listen_fd, (struct sockaddr *) &servaddr, sizeof(servaddr)); 
listen(listen_fd, 10); 
comm_fd = accept(listen_fd, (struct sockaddr*) NULL, NULL); 

while (1) 
{ 
    bzero(str, 100); 
    write(comm_fd, str, strlen(str) + 1); 
} 
} 
+0

複数のクライアントを同時に処理する必要がないと仮定すると、あなたの 'accept()'呼び出しもループ内にある必要があります。複数のクライアントを同時に処理する必要がある場合、stuffは_lot_をより困難にします。 – Alnitak

答えて

1
comm_fd = accept(listen_fd, (struct sockaddr*) NULL, NULL); 

while (1) 
{ 
    bzero(str, 100); 
    write(comm_fd, str, strlen(str) + 1); 
} 

whileループ内のコードは、あなたがaccept新しい接続への呼び出しを配置し​​た今見て...絶えず繰り返されるコードです:これは私のテストコードです。ループはwhileの外側にあります。あなたのコードが現在立っているので、あなたはそれを一度呼び出すと、新しい接続で常にデータを送信します。

whileループ内にacceptを入れて、closeに新しい接続を追加すると、次のコードのように結果が得られます。

while (1) 
{ 
    comm_fd = accept(listen_fd, (struct sockaddr*) NULL, NULL); 
    bzero(str, 100); 
    write(comm_fd, str, strlen(str) + 1); 
    close(comm_fd); 
} 
+0

それはトリックを行うようだと私はまた、whileループ内の受け入れ部分を移動しました。ありがとう。 – Kamsiinov

関連する問題