windowsの下でネットのプログラミングノートのlinuxはwindowsプログラムに移植します。

3409 ワード

1)再定義を防止するために、windowsコードの先頭ファイルには次の順序が含まれています。
璣include菗define WIN 32_リーン.AND_メロンブックス
参考記事:http://blog.sina.com.cn/s/blog_658 d 267 b 0100 jb 2 l.
//=====================================================================================================================================================
2)sockaddr
windows:
struct sockaddr {
    unsigned short    sa_family;    // address family, AF_xxx
    char              sa_data[14];  // 14 bytes of protocol address
};
Linux:
struct sockaddr{
unsigned shart
sakufamily/*アドレス族、AFuxxx*/
char saudta[14]/*14バイトのプロトコルアドレス*/

sa_familyは普通AF_ですINETは、Internet(TCP/IP)アドレス族を表します。sa_dataにはこのsocketのIPアドレスとポート番号が含まれています。
3)sockaddr_in
windows:
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
};
Linux:
struct sockaddr_in{
ショートポイントsinufamily/*アドレス族*/
unsigned shot int sinuport;/*ポート番号*/
struct inudr sinudr;/*IPアドレス*/
unsigned char sinuzo[8]/*0を充填してstruct sockaddrと同じ大きさを維持します。
}  
この構造はもっと使いやすいです。sin_ゼロはsockaddr_に用いられる。in構造はstruct sockaddrと同じ長さに充填され、bゼロ()またはmemset()関数でゼロにすることができる。
sockaddr_を指しますnのポインタとsockaddrを指すポインタは互いに変換できます。これは、関数が必要とするパラメータの種類がsockaddrの場合、関数で呼び出すことができます。
時には一つをsockaddr_に向けます。inのポインタはsockaddrを指すポインタに変換されます。あるいは反対です。 
//=====================================================================================================================================================
4)socket()
linux:
int socket(int af,int type,int protocol)
windows:
SOCKET socket(int af,int type,int protocol)//ここでwindowsはlinuxと同じで、SOCKETタイプはint型(16ビット符号無し整数)5)bind()である。
linux:
int bit(int sockfd、struct sockaddr*myuader、socklenuaddrlen); 
windows:
int bit(SOCKET sockfd、struct sockaddr*myuar、intaddrlen);socketlenはint型------ここはあまり確定しないで、真相を求めます!
6)recvfrom()
windows:
int recvfrom(SOCKET sockfd、char*buf、int len、int flags、struct sockaddr*from、int*from);
Linux:
int recvfrom(int sockfd、void*buf、int len、unsigned int flags、struct sockaddr*from、socket t*from)
7)sendto()
windows:
int sendto(SOCKET s、const char*msg、int len、int flags、const struct sockaddr*to、int tolen);
linux:
int sendto(int s,const void*msg,int len,int flags,struct sockaddr*to,socklentolen)
8)select()
linux:
windows:
9)addinfo
windows:
typedef struct addrinfo {
  int             ai_flags;
  int             ai_family;
  int             ai_socktype;
  int             ai_protocol;
  size_t          ai_addrlen;
  char            *ai_canonname;
  struct sockaddr  *ai_addr;
  struct addrinfo  *ai_next;
} ADDRINFOA, *PADDRINFOA;
linux:
struct addrinfo {    
int  ai_flags;    
int  ai_family;    
int  ai_socktype;   
int     ai_protocol;    
size_t  ai_addrlen;    
struct sockaddr *ai_addr;    
char   *ai_canonname;    //   !!!    
struct addrinfo *ai_next;
};