Uživatelské nástroje

Nástroje pro tento web


c_network

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Následující verze
Předchozí verze
c_network [2012/02/18 20:24] – vytvořeno djbuldogc_network [2025/08/28 10:09] (aktuální) – upraveno mimo DokuWiki 127.0.0.1
Řádek 1: Řádek 1:
-==== Broadcast ====+====== Programovani soketu v C ====== 
 + 
 +===== Sokety ===== 
 + 
 +  * zakladni navod prace se sokety:                                           
 +     * http://www.linuxhowtos.org/C_C++/socket.htm                             
 +  * navod na libovolny raw paket:                                             
 +     * http://mixter.void.ru/rawip.html                                        
 +     * http://www.tenouk.com/Module43a.html                                    
 +  * super navod na broadcast:                                                 
 +     * http://beej.us/guide/bgnet/output/html/multipage/advanced.html#broadcast  
 +  * blokovane cteni - timeout:                                                
 +     * http://www.programmersheaven.com/mb/CandCPP/353252/353252/how-to-set-timeout-for-recvfrom-method/ 
 +  * co jsou blokovane a neblokovane sockety .. neblokovany muze byt i bez select 
 +    * http://www.cs.vsb.cz/grygarek/PS/sockets.html 
 +  * co je vlastne select()? 
 +    * http://www.root.cz/clanky/sokety-a-c-funkce-select/ 
 + 
 +==== Datové typy a struktury pro HW nebo protokoly ==== 
 +    * int může být někde 32 bit, někde třeba 16 bit, pokud potřebujeme určitou přesnou velikost, jsou užitečné typy 
 +      * int8_t, uint8_t, int16_t, uint16_t ... int64_t, uint64_t 
 +      * viz http://linux.die.net/man/3/int8_t 
 +    * pokud používáme datové struktury 
 +      * vkládají se někdy mezi jednotlivé atributy prazdné místa do paměti,  
 +      * popřípadě se provádí nějaké optimalizace, které mohou zabrat více paměti, než ve skutečnosti chceme. 
 +      * někdy potřebujeme, aby struktura zabírala stejné místo v paměti na všech architekturách 
 +      * použijeme  
 +<code> 
 +struct my_struct { 
 +        uint8_t  field1; 
 +        uint16_t field2; 
 +} __attribute__((packed)); 
 +</code> 
 +      * výhody a nvýhody viz  http://digitalvampire.org/blog/index.php/2006/07/31/why-you-shouldnt-use-__attribute__packed/ 
 +    * některé architektury používají jiný formát ukládání čísel (big-endian, little-endian) 
 +      * pro zachování stejného způsobu ukládání se používá funkce htons (HostTONetworkSmall), htonl ..  
 +<code> 
 +#include <netinet/in.h> 
 + 
 +uint32_t htonl(uint32_t hostlong); 
 +uint16_t htons(uint16_t hostshort); 
 +uint32_t ntohl(uint32_t netlong); 
 +uint16_t ntohs(uint16_t netshort); 
 +</code> 
 + 
 +==== Prace s adresami ==== 
 + 
 +  * struct sockaddr je nejvice obecna 
 +  * jednotlive struktury jsou mezi sebou prevoditelne, ale nemusi mit vubec stejnou delku!! Je treba si uvedomit, kam mohu kdy sahnout ve strukture. 
 + 
 +<code> 
 +include <netinet/in.h> 
 + 
 +// All pointers to socket address structures are often cast to pointers 
 +// to this type before use in various functions and system calls: 
 + 
 +struct sockaddr { 
 +    unsigned short    sa_family;    // address family, AF_xxx 
 +    char              sa_data[14];  // 14 bytes of protocol address 
 +}; 
 + 
 + 
 +// IPv4 AF_INET sockets: 
 + 
 +struct sockaddr_in { 
 +    short            sin_family;   // e.g. AF_INET, AF_INET6 
 +    unsigned short   sin_port;     // e.g. htons(3490) 
 +    struct in_addr   sin_addr;     // see struct in_addr, below 
 +    char             sin_zero[8];  // zero this if you want to 
 +}; 
 + 
 +struct in_addr { 
 +    unsigned long s_addr;          // load with inet_pton() 
 +}; 
 + 
 + 
 +// IPv6 AF_INET6 sockets: 
 + 
 +struct sockaddr_in6 { 
 +    u_int16_t       sin6_family;   // address family, AF_INET6 
 +    u_int16_t       sin6_port;     // port number, Network Byte Order 
 +    u_int32_t       sin6_flowinfo; // IPv6 flow information 
 +    struct in6_addr sin6_addr;     // IPv6 address 
 +    u_int32_t       sin6_scope_id; // Scope ID 
 +}; 
 + 
 +struct in6_addr { 
 +    unsigned char   s6_addr[16];   // load with inet_pton() 
 +}; 
 + 
 + 
 +// General socket address holding structure, big enough to hold either 
 +// struct sockaddr_in or struct sockaddr_in6 data: 
 + 
 +struct sockaddr_storage { 
 +    sa_family_t  ss_family;     // address family 
 + 
 +    // all this is padding, implementation specific, ignore it: 
 +    char      __ss_pad1[_SS_PAD1SIZE]; 
 +    int64_t   __ss_align; 
 +    char      __ss_pad2[_SS_PAD2SIZE]; 
 +}; 
 +</code> 
 + 
 +===== Broadcast =====
   * pokrývá dvě vrstvy modelu ISO/OSI (spojová a síťová)   * pokrývá dvě vrstvy modelu ISO/OSI (spojová a síťová)
   * MAC broadcast (FF:FF:FF:FF:FF:FF)   * MAC broadcast (FF:FF:FF:FF:FF:FF)
Řádek 21: Řádek 125:
  
  
-=== test příjmu broadcastu aplikací listen ===+==== Test příjmu broadcastu aplikací listen ====
   * OTESTOVAT ZNOVU.. NC MA TEHDENCY UZAMCIT SE JEN NA JEDNU RCVIP.. MUSIM HO PO KAZDEM POKUSU ZABIT   * OTESTOVAT ZNOVU.. NC MA TEHDENCY UZAMCIT SE JEN NA JEDNU RCVIP.. MUSIM HO PO KAZDEM POKUSU ZABIT
   * A TEN MZ VERZE 0.40 NEUMI ZMENIT MAC, MALFORMUJE PKT   * A TEN MZ VERZE 0.40 NEUMI ZMENIT MAC, MALFORMUJE PKT
Řádek 80: Řádek 184:
      * přijímá data pouze na intf odpovídající uvedené IP adrese      * přijímá data pouze na intf odpovídající uvedené IP adrese
      * pro odesílání dat nebo broadcastu se použije uvedená IP      * pro odesílání dat nebo broadcastu se použije uvedená IP
- 
-== Sokety == 
- 
-  * zakladni navod prace se sokety:                                           
-     * http://www.linuxhowtos.org/C_C++/socket.htm                             
-  * navod na libovolny raw paket:                                             
-     * http://mixter.void.ru/rawip.html                                        
-     * http://www.tenouk.com/Module43a.html                                    
-  * super navod na broadcast:                                                 
-     * http://beej.us/guide/bgnet/output/html/multipage/advanced.html#broadcast  
-  * blokovane cteni - timeout:                                                
-     * http://www.programmersheaven.com/mb/CandCPP/353252/353252/how-to-set-timeout-for-recvfrom-method/ 
-  * co jsou blokovane a neblokovane sockety .. neblokovany muze byt i bez select 
-    * http://www.cs.vsb.cz/grygarek/PS/sockets.html 
-  * co je vlastne select()? 
-    * http://www.root.cz/clanky/sokety-a-c-funkce-select/ 
- 
-== datové typy a struktury pro HW nebo protokoly == 
-    * int může být někde 32 bit, někde třeba 16 bit, pokud potřebujeme určitou přesnou velikost, jsou užitečné typy 
-      * int8_t, uint8_t, int16_t, uint16_t ... int64_t, uint64_t 
-      * viz http://linux.die.net/man/3/int8_t 
-    * pokud používáme datové struktury 
-      * vkládají se někdy mezi jednotlivé atributy prazdné místa do paměti,  
-      * popřípadě se provádí nějaké optimalizace, které mohou zabrat více paměti, než ve skutečnosti chceme. 
-      * někdy potřebujeme, aby struktura zabírala stejné místo v paměti na všech architekturách 
-      * použijeme  
-<code> 
-struct my_struct { 
-        uint8_t  field1; 
-        uint16_t field2; 
-} __attribute__((packed)); 
-</code> 
-      * výhody a nvýhody viz  http://digitalvampire.org/blog/index.php/2006/07/31/why-you-shouldnt-use-__attribute__packed/ 
-    * některé architektury používají jiný formát ukládání čísel (big-endian, little-endian) 
-      * pro zachování stejného způsobu ukládání se používá funkce htons, htonl ..  
-<code> 
-#include <netinet/in.h> 
- 
-uint32_t htonl(uint32_t hostlong); 
-uint16_t htons(uint16_t hostshort); 
-uint32_t ntohl(uint32_t netlong); 
-uint16_t ntohs(uint16_t netshort); 
-</code> 
  
c_network.1329593084.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki