logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak obsłużyć komunikację TCP w C na Linuxie z użyciem GCC?

piotrek5001 02 Lis 2004 19:33 2783 4
REKLAMA
  • #1 956058
    piotrek5001
    Poziom 24  
    Posty: 913
    Pomógł: 26
    Ocena: 21
    Witam!

    W jaki sposób najprościej obsłużyć programując w C pod linuxem komunikację poprzez protokół TCP? Chodzi mi konkretnie o wysłanie pakietu do serwera (znany jest IP i port serwera), oczekiwanie na odpowiedź i odczytanie odpowiedzi.

    Bardzo proszę o odpowiedź. Dobrze by było też gdyby ktoś zapodał jakieś przykłady.


    Pozdrawiam i z góry dziękuję.
  • REKLAMA
  • #2 957196
    deliberabundus
    Poziom 23  
    Posty: 755
    Pomógł: 4
    Ocena: 10
    Bardzo dobry manual do soketów:

    Beenj's guide to network programming. Załączam pdf'a.
    Załączniki:
    • bgnet.pdf (298.06 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #3 957632
    krzkomar
    Poziom 25  
    Posty: 877
    Pomógł: 71
    Ocena: 25
    Polecam literaturę:
    Linux. Programowanie - Neil Matthew
    Linux programowanie w przykładach - Wall Kurt

    Są to bardzo dobre pozycje i się wzajemnie uzupełniają, napewno znajdziesz tam odpowiedź jak to zrobić.
  • REKLAMA
  • #4 957708
    dziobass
    Poziom 12  
    Posty: 51
    Jesli chodzi o gniazdka strunieniowe, to od strony klienta jest następujący schemat:
    
    int main()
    {
        struct sockaddr_in server_info;
        int sockid;
        char buf[256];
    
        sockid = socket(AF_INET, SOCK_STREAM, 0);
        if(sockid < 0) {...}
    
        server_info.sin_family = AF_INET;
        server.sin_addr.s_addr = inet_addr([i]IP_ADDRESS[/i]);
        server.sin_port = htons([i]PORT[/i]);
    
        if(connect(sockfd, (struct sockaddr *)&server_info, 
        sizeof(struct sockaddr)) < 0) {...}
        //petla
        send(sockid, buf, strlen(buf), 0);
        recv(sockid, buf, strlen(buf), 0);
        //koniec petli
    
        close(sockid);
    }
    

    z tym ze to jest przykład gniazdka niebuforującego, synchronicznego, tj działającego w ten sposób, że klient wysyła coś do servera, server odpowiada. Jeśli ten schemat zostanie zakłucony, np. server wyśle dwie odpowiedzi, klient dostanie drugą dopiero po wysłaniu kolejnego pakietu.

    Tutaj możesz pobrać książke Beenj's guide to network programming, a tutaj jest jej polskie tłumacznie.
  • #5 957912
    piotrek5001
    Poziom 24  
    Posty: 913
    Pomógł: 26
    Ocena: 21
    Dzięki, jak tylko naprawię lunuxa, popróbuję. Teraz mam Kernel Panic :(
REKLAMA