2014-12-15 29 views
5

Tôi hiện đang thiết lập máy chủ TCP có thể chấp nhận kết nối từ máy khách và lặp lại bất kỳ thông tin nào của ứng dụng khách. Làm thế nào tôi sẽ đi về làm cho nhiều khách hàng kết nối với máy chủ và có đầu vào của họ được gửi đến tất cả các khách hàng?Làm cách nào để có thể chấp nhận nhiều máy khách đến máy chủ TCP?

Có vẻ tôi nên ngã ba, nhưng tôi không hoàn toàn chắc chắn như thế nào ...

Trên máy chủ, tôi nên đặt một vòng lặp vô hạn bắt đầu từ chấp nhận (hoặc nghe?) Mà sẽ ngã ba khi có một kết nối mới? Sau đó, về quá trình con tôi sẽ phải đóng socket từ một quá trình trước đó và kết nối với một cái mới, nhưng một lần nữa tôi không hoàn toàn chắc chắn.

Mã giả sẽ trông như thế nào liên quan đến các nhánh và thao tác ổ cắm? Tôi đoán:

while(1) //before connection or accept? 

pid = fork() 

if(pid==0) 
    // open socket from client 
    // run the rest of the code 
    // end process when client disconnects 
else 
    // close socket from client 

Trả lời

0

Hóa ra mã giả trông giống như:

while(1)  //before listen 

pid = fork; //right after accept 

if(fork>0) 
    close sd2 (sd2 = accept(....)) 
    continue 
else 
    run the rest of the program 
2

Bạn có thể tìm thấy trong rất nhiều ví dụ Internet, đầu tiên tôi đã tìm thấy: http://www.tutorialspoint.com/unix_sockets/socket_server_example.htm

Hãy ghi nhớ quá trình đó (hoặc chuỗi) cho mỗi phương pháp tiếp cận khách hàng không mở rộng tốt. Máy chủ hiện đại sử dụng vòng lặp điều phối chính không chặn. Hãy xem libevent.

Dưới đây là ví dụ về máy chủ echo sử dụng libevent: https://github.com/jasonish/libevent-examples/tree/master/echo-server

Các vấn đề liên quan