Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

SocketW i brak obsługi wielu klientów?

Ostatnio zmodyfikowano 2008-09-18 19:42
Autor Wiadomość
lynx
Temat założony przez niniejszego użytkownika
SocketW i brak obsługi wielu klientów?
» 2008-09-18 15:19:00
No, cóż mam 2 pliki c++ serwer i klient. Polegające na tym że co wpiszemy w okienku serwera natychmiast jest wysyłane do klienta, niestety :/ program kompiluje się, ale obsługuje tylko jednego klienta ;(. Nie wiem, może są jakieś funkcje na to (choć ich nie widze), ale wydaje mi się, że biblioteka(Serwer) powinna obsługiwać wiele połączeń, bez dodatkowych funkcji. Co o tym sądzicie, i czy wiecie jakby to rozwiązać?



Dodam jeszcze, że mam problem, bo tak samo nie wiem jak przesłać typ int, a żadnego tutka na stronie oprócz dokumentacji nie ma. Wysyłałem 2 razy e-maila jak mam to zrobić, odpowiedzi zero. Więc mam małą ochotę przejść na HawkNL, zamiast SocketW. Co do HawkNL to, nie mogę znaleźć w dokumentacji funkcji w stylu send(). Ale, będę jeszcze szukał ;P
P-1616
DejaVu
» 2008-09-18 15:31:16
Dane transmituje się przez sieć zawsze w postaci binarnej. Musisz napisać sobie protokół transmisji, który skonwertuje int'a na tekst, a następnie ten tekst (czyli 4 bajty) wyśle do klienta.

Co do obsługi wielu klientów... nie znam tej biblioteki, którą używasz ale na WinSock'u masz ten sam problem w przypadku protokołu TCP, który rozwiązywany jest deskryptory plików: fd_set() lub przez tworzenie procesów.

Polecam się wczytać w dokumentację biblioteki, którą używasz - może jest zaprojektowany łatwy mechanizm do obsługi wielu klientów TCP.
P-1617
lynx
Temat założony przez niniejszego użytkownika
» 2008-09-18 16:27:02
Tylko to konwenterowanie nie takie proste jest. Nie wiem mam utworzyć funkcję w stylu:
swicth(liczba)
{
case 1 : tekst = "1";
         break;
....
czy jakoś inaczej ;P Bo mając do czynienia z liczbami 1000 to bym się trochę orobił nie mówiąc już o 100 000 ;P


A co do wielu klientów to znalaźłem takie coś, może zajrzysz:
http://www.digitalfanatics.org/cal/socketw/index.html
są tam funkcje:
-get_fd();
-fsend();
-frecv():
-fsendmsg();
-cloese_fd();

Niby podobne do set_fd(), co prawda nie zbyt to umiem przetłumaczyć(stronę), ale tak wydaje mi się, że są one przeznaczone do czegoś innego.



Czy np. w UDP, SSL/TTL jest też problem z wieloma klientami, czy tak jest tylko w przypadku TCP/IP? Nie mogę się dowiedzieć czego używa HawkNL TCP/IP czy UDP. Ale w przypadku, gdy HawkNl łączy się używając protokołu TCP/IP problem też taki jest?

P-1618
DejaVu
» 2008-09-18 18:25:46
Zapis liczby binarnie do bufora:
C/C++
char * bufor = new char[ 400 ];
memcpy(( char * ) & liczba, bufor, sizeof( liczba ) );

/edit:
Przecież tutaj masz ewidentny przykład wysyłania inta przez sieć:
http://www.digitalfanatics.org/cal/socketw/docs/inet.html#example3

/edit2:
Tu są opisane funkcje o których mówisz:
http://www.digitalfanatics.org/cal/socketw/docs/base.html
Raczej powiedziałbym, że biedna ta biblioteka...

Tu masz to o czym ja mówiłem:
http://www.pradnik.net/netman/advanced.html#select

Kurs wykorzystywania sieci Windows/Linux, C++
P-1619
lynx
Temat założony przez niniejszego użytkownika
» 2008-09-18 18:39:22
Tylko że ten przykłąd nie działa, ale bo ja go nie umiem wykonać ;P. Wogóle przydałoby się jakieś wytłumaczenie tego przykładu.
P-1620
DejaVu
» 2008-09-18 18:44:18
Działa - jesteś leniwy:
C/C++
#include <string>
int main()
{
    int liczba;
    char * bufor = new char[ 400 ]; //Utworzenie bufora
    memcpy(( char * ) & liczba, bufor, sizeof( liczba ) ); //Kopiowanie
    delete[] bufor;
    return 0;
}
P-1621
lynx
Temat założony przez niniejszego użytkownika
» 2008-09-18 19:42:36
Może z tą leniwością to mówisz prawdę, ale akurat wtedy nie miałem namyśli twojego sposobu. ;P ;P Chodziło mi o sposób umieszcozny na stronie SocketW ;D Kompilować się kompiluje, ale nie wiadomo jak zbudować klienta i po uruchomieniu obydwu aplikacji, one automatycznie zamykają(złe funkcje w złym miejscu, poumieszczane przez moją osobę).
P-1623
« 1 »
  Strona 1 z 1