Socket, jeden server wielu klientów

0

Piszę sobie prostą aplikację na socketach, która ma wielu klientów, czy jest możliwe żeby server wysyłał wiadomość tylko do konkretnego klienta, nie do wszystkich?Jeśli tak to czy możecie podesłać przykład?Jak rozpoznawać poszczególnych klientów na serverze?

1

Każdy klient powinien mieć osobnego Socketa. Jeżeli chcesz wysłać coś do konkretnego klienta to piszesz do socketa tego konkretnego klienta a nie pod wszystkie sockety.

Wybitny Lew napisał(a):

Jak rozpoznawać poszczególnych klientów na serverze?

Zalezy co przez to rozumiesz. Może napisz co do za aplikacja chociaz. Jezeli jest to np. chat to pewnie masz cos takiego jak nicki. Wtedy moglbys sobie stworzyć mape gdzie kluczem jest nick a wartoscia socket klienta. Jak chcesz wtedy wyslac jakas wiadomosc do klienta o nicku X to za pomoca klucza X pobierasz socket klienta i wysylasz dane pod ten wlasne socket.

0

Jest może jakiś przykład na necie jak to zrobić?

1

W najprostszym przypadku wystarczy zwykla lista. W liscie przechowujesz obiekt symbolizujacy uzytkownika (klasa uzytkownik). Kazdy uzytkownik ma swoj unikalny identyfikator (aby bylo latwo odnalezc wlasciwego klinenta), swoj wlasny socket i inne rozne wlasciwosci w zaleznosci od tego co potrzebujesz.

Ma to taka wada, ze musisz przechowywac obiekt dla kazdego uzytkownika. Ale dla prostego serwera sie nada. Do bardziej wyrafinowanych zastosowan raczej warto pomyslec o select() i asynchonicznej komunikacji.

0

czy jest możliwe żeby server wysyłał wiadomość tylko do konkretnego klienta, nie do wszystkich

Nie ma innej możliwości bo socket może łączyć tylko z jednym odbiorcą. Nie da sie mieć jednego socketu połączonego z wieloma klientami (* pomijam tu kwestia multicastu bo tam też odbiorca, jako adres IP, jest jeden a infrastruktura sieciowa zajmuje się przesłaniem informacji do zainteresowanych osób)

1 użytkowników online, w tym zalogowanych: 0, gości: 1