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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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必須得連接上。“The 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 楊粼波 閱讀(853) 評論(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国产一区| 黄网站免费久久| 亚洲一二三区在线观看| 欧美激情网友自拍| 久久亚洲二区| 免费亚洲婷婷| 欧美激情中文字幕一区二区| 欧美成人免费全部观看天天性色| 欧美不卡视频一区发布| 欧美激情1区2区| 亚洲经典在线| 欧美激情精品久久久久久黑人 | 亚洲第一福利在线观看| 欧美69wwwcom| 最新高清无码专区| 一区二区三区波多野结衣在线观看| 亚洲网站在线播放| 欧美中文字幕第一页| 久久亚洲不卡| 欧美精品v日韩精品v韩国精品v | 欧美高清在线精品一区| 欧美人成免费网站| 国产精品系列在线| 国外精品视频| 亚洲天堂av图片| 久久久久国产一区二区| 亚洲第一页在线| 亚洲一区二区免费在线| 久久久99精品免费观看不卡| 欧美激情四色| 国产视频一区三区| 99re在线精品| 久久亚洲精品一区| a4yy欧美一区二区三区| 久久青青草原一区二区| 欧美日韩综合视频网址| 在线高清一区| 午夜精品久久久久久久99黑人| 久久人人超碰| 亚洲社区在线观看| 免费一级欧美在线大片| 国产区二精品视| 亚洲午夜av电影| 亚洲成色www8888| 久久se精品一区二区| 欧美a级大片| 亚洲视频在线观看| 欧美激情中文不卡| **欧美日韩vr在线| 久久精品在线视频| 亚洲一区二区三区777| 欧美乱妇高清无乱码| 在线电影国产精品| 久久九九有精品国产23| 亚洲网站啪啪| 国产精品国产自产拍高清av| 99re6这里只有精品视频在线观看| 蜜臀av国产精品久久久久| 午夜视频精品| 国产区精品视频| 亚洲综合999| 一区二区欧美在线观看| 欧美人与性动交a欧美精品| 亚洲黄页一区| 欧美成人免费大片| 美女日韩在线中文字幕| 亚洲国产日韩在线一区模特| 另类av一区二区| 久久精品久久综合| 国产在线不卡视频| 久久精品国产一区二区三区| 亚洲欧美在线一区二区| 国产精品日韩一区| 香蕉免费一区二区三区在线观看 | 久久精品91久久香蕉加勒比| 国产一区二区精品| 久久久亚洲欧洲日产国码αv| 欧美一级久久| 激情久久久久| 欧美国产成人精品| 欧美—级在线免费片| 99精品欧美一区二区蜜桃免费| 亚洲精品一二区| 国产精品久久国产愉拍| 欧美一区二区在线观看| 欧美中文字幕视频| 亚洲国产高清aⅴ视频| 亚洲风情亚aⅴ在线发布| 欧美精品www| 午夜免费日韩视频| 久久男人资源视频| 亚洲欧洲久久| 这里只有精品丝袜| 国产亚洲a∨片在线观看| 老司机成人网| 欧美精品免费播放| 亚久久调教视频| 久久免费精品视频| 久久一区视频| 亚洲激情在线视频| 亚洲精品久久久蜜桃 | 欧美激情第1页| 欧美片第1页综合| 国产精品久久二区| 久久精品国产综合精品| 蜜桃伊人久久| 亚洲香蕉成视频在线观看 | 亚洲欧美电影院| 91久久嫩草影院一区二区| 99亚洲一区二区| 亚洲第一网站免费视频| 一区二区三区视频在线观看| 激情欧美一区二区三区在线观看 | 亚洲欧美国产精品桃花| 亚洲激情成人| 午夜亚洲激情| 亚洲日产国产精品| 亚洲欧美中文另类| 99av国产精品欲麻豆| 亚洲你懂的在线视频| 日韩一区二区精品视频| 久久久久久噜噜噜久久久精品| 亚洲图片欧洲图片av| 老司机午夜精品| 久久精品水蜜桃av综合天堂| 欧美日韩一区二区视频在线| 六月婷婷久久| 国产亚洲精品aa| 亚洲天堂av电影| 一区二区三区四区蜜桃| 欧美一区午夜精品| 亚洲欧美国产一区二区三区| 欧美日韩国产免费| 91久久久久久久久久久久久| 国产三区二区一区久久| 一区二区三区精品在线| 99国产精品久久久| 米奇777在线欧美播放| 久久综合久久88| 国产一区二区看久久| 亚洲日本在线观看| 尤物九九久久国产精品的分类| 欧美一区二区三区免费看| 欧美在线啊v| 欧美系列电影免费观看| 一区二区免费在线观看| 亚洲午夜视频| 欧美三级电影精品| 亚洲视频在线一区| 亚洲欧美日韩国产一区| 国产精品美女一区二区| 亚洲欧美日韩久久精品| 欧美一区日韩一区| 国内外成人在线视频| 久久天天躁狠狠躁夜夜爽蜜月| 免费短视频成人日韩| 亚洲国产成人91精品| 麻豆成人综合网| 亚洲精品美女91| 亚洲综合色网站| 国产人成精品一区二区三| 久久精品国产久精国产一老狼| 久热精品视频在线观看一区| 国产一区av在线| 久久综合九色99| 最新日韩在线| 亚洲女同性videos| 国内精品美女av在线播放| 麻豆久久婷婷| 亚洲美女中出| 国产精品久久网站| 久久精品国产一区二区三| 久久久噜久噜久久综合| 最新国产の精品合集bt伙计| 欧美涩涩视频| 欧美自拍偷拍午夜视频| 亚洲国产高清在线| 欧美在线播放一区二区| 亚洲国产你懂的| 国产精品第13页| 久久亚洲午夜电影| 亚洲午夜精品久久久久久app| 蜜臀久久久99精品久久久久久| 在线视频精品一区| 影音先锋欧美精品| 国产精品久久久一本精品| 免费成人黄色| 欧美亚洲一区二区在线| 亚洲精一区二区三区| 老司机久久99久久精品播放免费| 一区二区三区不卡视频在线观看| 国产欧美日韩精品丝袜高跟鞋| 欧美 日韩 国产在线| 欧美在线观看一区二区| 中文国产成人精品| 欧美成人a视频| 久久精品国产77777蜜臀| 一区二区欧美在线| 亚洲国产一区二区三区a毛片| 国产一区在线播放|