青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

Socket學習筆記之二(常用基本函數)

函數:
u_long htonl(u_long hostlong)
u_short htons(u_short hostshort)
u_long ntohl(u_long netlong)
u_short ntohs(u_short netshort)

這上面四個函數類似,功能相似,都用來轉換數據格式。用來實現處理器中short,long數據類型與網絡中的轉換。在網絡中傳輸均以字節為單位(除了bit外就是最小的單位了)。一個short占兩字節,一個long占四個字節。一個short從一臺機子傳到另外一臺機子上要能夠還原,則必須統一規定高低字節順序。在TCP/IP協議規范中short的高位在低字節,低位在高字節。這與有些處理器中或者系統中表示不一樣。例如在windows中:
?unsigned short hs = 0x0102;
?unsigned short ns = htons( hs );
?printf( "0x%04x",ns);//ns:0x0201
所以對于網絡端口等數據在使用前必須進行統一,例如
unsigned short port = 2088;
m_sockaddr.sin_port = htons( port );
等等。這四個函數,我開始不知道為什么取這些名字總是記不住,后來想明白了
htons表示host to net short,ntohs表示net to host short
htonl表示host to net long,ntohl表示net to host long
這樣不需要刻意去記也就明白了。

unsigned long inet_addr(const char* cp);
char* FAR inet_ntoa(struct in_addr in);

這兩個函數用來把表示ip地址的字符串(如:202.114.14.12)跟表示ip的long或者結構之間轉換。
inet_addr得到的是已經統一字節順序的,可以直接賦值給in_addr里的s_adr,例如:
?char *pHost = "202.114.14.12"
?m_sockaddr.sin_addr.s_addr?=?inet_addr( pHost );

int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);
加載winsock庫。返回0表示成功,非0表示錯誤。第一個參數是版本號,現在最高版本是2.2版,不過Win CE好像只支持1.1版,高位字節表示副版本號,低位字節表示高版本號,所以這里一般就是0x0202或者0x0101或者使用宏定義MAKEWORD(2,2)或者MAKEWORD(1,1),第二個參數是一個與winsock庫信息有關的結構,一把不用去管它。在使用winsock前,都必須加載,一般在程序初始化時候做這個事情。一般使用如下:
?WSADATA data;
?if ( WSAStartup(0x0202,&data) != 0 )
?{
??printf("error id: %d",GetLastError());
?}
上面的GetLastError()是使用非常頻繁的函數。很多函數的返回值得意義都是表示函數執行是否出錯。當winsock的函數發生錯誤時,用GetLastError()可以得到最后一次發生錯誤的錯誤號。在.Net中有個工具:查找錯誤,輸入錯誤號,得到錯誤信息。

int gethostname(char* name,int namelen);
獲取主機名。輸入參數為緩沖區地址和大小。
struct hostent* FAR gethostbyname(const char* name);
由主機名得到主機信息,可以用來解析域名。需要注意的是MSDN中的一段話“The application must never attempt to modify this structure or to free any of its components. Furthermore, only one copy of this structure is allocated per thread, so the application should copy any information it needs before issuing any other Windows Sockets function calls”這說明了一般用法的時候,要把數據拷貝出來,看看下面代碼:
?char???name[255];
?PHOSTENT??phostinfo;
?PHOSTENT??phostinfo1;
?WSADATA data;
?struct in_addr** addrPtr;
?struct in_addr** addrPtr1;

?if ( WSAStartup(0x0202,&data) != 0 )
?{
??printf("error id: %d",GetLastError());
?}

?if( gethostname ( name, sizeof(name)) == 0)
?{
??printf("%s",name);
??if((phostinfo = gethostbyname(name)) != NULL)
??{
???for (addrPtr = (struct in_addr **)phostinfo->h_addr_list;*addrPtr;addrPtr++)
???{//顯示我機子的ip
????printf("%s\n", inet_ntoa(**addrPtr));
???}
??}
??else
???printf("error id : %d",GetLastError());
?}
?else
?{
??printf("error id :%d",GetLastError());
?}

?if((phostinfo1 = gethostbyname("bbs.whnet.edu.cn")) != NULL)
?{
??for (addrPtr1 = (struct in_addr **)phostinfo->h_addr_list;*addrPtr1;addrPtr1++)
??{//顯示bbs.whnet.edu.cn的ip:202.114.0.248
???printf("%s\n", inet_ntoa(**addrPtr1));
??}
?}
?else
??printf("error id : %d",GetLastError());

?for (addrPtr = (struct in_addr **)phostinfo->h_addr_list;*addrPtr;addrPtr++)
?{//在這里顯示的是bbs.whnet.edu.cn的ip:202.114.0.248,不是我機子的ip
??printf("%s\n", inet_ntoa(**addrPtr));
?}

struct HOSTENT* FAR gethostbyaddr(const char* addr,int len,int type);
根據ip地址得到主機信息。這里的ip必須是網絡字節順序的。示例代碼:
?PHOSTENT phostinfo2;
?unsigned long ip = inet_addr("127.0.0.1");
?if ( (phostinfo2 = gethostbyaddr((char*)&ip,sizeof(ip),AF_INET)) != NULL)
?{//顯示localhost
??printf("host name : %s",phostinfo2->h_name );
?}
?else
??printf("error id : %d",GetLastError());

int getsockname(SOCKET s,struct sockaddr* name,int* namelen);
這個函數用來的得到socket的本地地址,但是前提是socket必須已經bind或者已經是連接上的。如果socket不是面向連接的話,比如udp,那得socket上有數據才行。
int getpeername(SOCKET s,struct sockaddr* name,int* namelen);
這個函數用來得到socket那一邊上的地址,顯然socket必須得連接上?!癟he getpeername function can be used only on a connected socket. For datagram sockets, only the name of a peer specified in a previous connect call will be returned—any name specified by a previous sendto call will not be returned by getpeername.”

至于bind,listen,accept,recv,send等后面學select模型的時候再仔細研究。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=551760

posted on 2006-04-20 17:27 楊粼波 閱讀(862) 評論(0)  編輯 收藏 引用 所屬分類: 網絡編程

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一区二区三区另类| 国产亚洲精品久久久久动| 久久精品在线| 欧美日韩免费| 欧美激情亚洲一区| 黄色亚洲免费| 欧美在线黄色| 午夜精品久久久99热福利| 欧美经典一区二区三区| 欧美成人精品| 亚洲高清视频一区二区| 午夜精品久久久久久久久| 亚洲女人小视频在线观看| 欧美精品一区二区在线观看| 欧美freesex8一10精品| 国产一区在线看| 欧美中文日韩| 久久国产精品久久国产精品| 国产精品入口日韩视频大尺度| 亚洲黄色成人久久久| 在线观看91久久久久久| 久久久久久久久久码影片| 久久av老司机精品网站导航| 国产精品亚洲欧美| 亚洲一级黄色| 亚洲欧美精品suv| 国产精品人人爽人人做我的可爱| 亚洲美女黄色| 亚洲午夜电影在线观看| 欧美三级乱人伦电影| 一本色道久久加勒比88综合| 亚洲一区二区三区视频播放| 欧美色区777第一页| 亚洲婷婷综合色高清在线 | 国产精品h在线观看| 亚洲美女福利视频网站| 亚洲一区二区三区在线观看视频| 欧美日韩蜜桃| 亚洲男同1069视频| 久久青草欧美一区二区三区| 精品成人一区二区三区四区| 免费看黄裸体一级大秀欧美| 亚洲欧洲一区二区在线观看| 亚洲性视频h| 国产精品日本一区二区| 欧美在线免费观看亚洲| 欧美大胆人体视频| 中文国产亚洲喷潮| 国产欧美丝祙| 狼人天天伊人久久| 日韩亚洲欧美高清| 久久国产直播| 亚洲级视频在线观看免费1级| 欧美日本高清| 性做久久久久久| 欧美风情在线观看| 亚洲性av在线| 18成人免费观看视频| 欧美日韩成人在线播放| 亚洲欧美在线一区二区| 欧美国产视频日韩| 午夜精品在线观看| 亚洲福利视频网站| 国产精品丝袜白浆摸在线| 久久免费精品日本久久中文字幕| 亚洲美女在线一区| 看片网站欧美日韩| 亚洲永久精品国产| 亚洲欧洲在线播放| 国产精品一区二区三区久久久| 久久一区二区三区超碰国产精品| 99ri日韩精品视频| 麻豆精品视频在线观看| 亚洲欧美精品中文字幕在线| 在线观看精品| 国产日韩欧美制服另类| 欧美日韩123| 免费在线观看日韩欧美| 新67194成人永久网站| 亚洲精品中文字| 欧美激情按摩在线| 久久人91精品久久久久久不卡 | 午夜久久tv| 99精品99久久久久久宅男| 狠狠色丁香久久婷婷综合丁香| 欧美视频一区在线观看| 欧美1区视频| 久久精品欧美| 久久av在线| 亚洲欧美日韩中文在线制服| av成人免费在线| 亚洲高清资源| 欧美ed2k| 美女视频黄 久久| 久久久久国色av免费看影院| 亚洲欧美日韩系列| 亚洲网站在线观看| 亚洲视频在线一区| 一区二区三区高清不卡| 亚洲毛片av| 99国产精品久久久久久久| 亚洲国内欧美| 亚洲人成网站影音先锋播放| 亚洲电影专区| 亚洲国产精品传媒在线观看| 一区二区三区在线观看欧美| 狠狠干综合网| 一区二区三区在线免费播放| 国内免费精品永久在线视频| 国内精品亚洲| 精品99一区二区三区| 在线播放中文一区| 亚洲国产精品t66y| 亚洲精品视频在线观看免费| 亚洲国产网站| 一区二区高清在线观看| 亚洲一区二区精品| 西西裸体人体做爰大胆久久久| 午夜视频久久久| 久久精品三级| 乱码第一页成人| 亚洲国产日韩欧美| av不卡在线| 午夜精品一区二区三区在线| 久久se精品一区精品二区| 久久久久国产免费免费| 欧美成人情趣视频| 欧美午夜精品久久久久久久| 国产精品一区二区三区免费观看| 国产主播喷水一区二区| 亚洲二区免费| 亚洲一本大道在线| 久久精品夜夜夜夜久久| 欧美激情性爽国产精品17p| 亚洲理伦在线| 欧美一区二区三区啪啪| 美女国内精品自产拍在线播放| 欧美理论电影在线播放| 国产精品自在在线| 亚洲经典三级| 午夜精品在线看| 欧美国产综合| 在线亚洲美日韩| 久久人人爽爽爽人久久久| 欧美日本中文字幕| 国产日韩欧美一区二区三区四区| 亚洲国产精品一区二区www| 一区二区免费在线播放| 久久人人97超碰人人澡爱香蕉 | 日韩视频不卡| 久久爱www久久做| 欧美日韩的一区二区| 国产一区二区三区四区三区四| 亚洲乱码国产乱码精品精天堂 | 99精品福利视频| 久久国产免费| 亚洲免费观看高清完整版在线观看熊| 午夜精品视频| 欧美日韩国产探花| 亚洲电影av| 欧美在线关看| 99热精品在线观看| 裸体丰满少妇做受久久99精品| 国产精品久久一卡二卡| 日韩一级大片在线| 老鸭窝毛片一区二区三区| 亚洲视频一二区| 欧美大片一区二区三区| 好吊色欧美一区二区三区四区| 亚洲一区三区电影在线观看| 欧美成人性网| 久久久国产午夜精品| 国产精品一区=区| 在线视频日韩精品| 亚洲国产综合91精品麻豆| 久久久久se| 国产一区香蕉久久| 亚洲欧美影院| 亚洲视频久久| 欧美吻胸吃奶大尺度电影| 99在线精品视频| 91久久精品美女高潮| 老司机凹凸av亚洲导航| 伊人狠狠色j香婷婷综合| 久久精品亚洲一区二区| 亚洲一区精品电影| 国产精品激情| 亚洲欧美色一区| 亚洲图片激情小说| 国产精品劲爆视频| 亚洲一区二区三区午夜| 一区二区三区免费在线观看| 欧美日韩国产页| 亚洲性视频网站| 一个色综合av| 国产欧美在线看| 久久久综合香蕉尹人综合网| 午夜在线视频一区二区区别| 国产日韩一区二区三区在线| 欧美一区二区视频在线观看2020 |