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

牽著老婆滿街逛

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

Socket學(xué)習(xí)筆記之二(常用基本函數(shù))

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

這上面四個函數(shù)類似,功能相似,都用來轉(zhuǎn)換數(shù)據(jù)格式。用來實現(xiàn)處理器中short,long數(shù)據(jù)類型與網(wǎng)絡(luò)中的轉(zhuǎn)換。在網(wǎng)絡(luò)中傳輸均以字節(jié)為單位(除了bit外就是最小的單位了)。一個short占兩字節(jié),一個long占四個字節(jié)。一個short從一臺機子傳到另外一臺機子上要能夠還原,則必須統(tǒng)一規(guī)定高低字節(jié)順序。在TCP/IP協(xié)議規(guī)范中short的高位在低字節(jié),低位在高字節(jié)。這與有些處理器中或者系統(tǒng)中表示不一樣。例如在windows中:
?unsigned short hs = 0x0102;
?unsigned short ns = htons( hs );
?printf( "0x%04x",ns);//ns:0x0201
所以對于網(wǎng)絡(luò)端口等數(shù)據(jù)在使用前必須進行統(tǒng)一,例如
unsigned short port = 2088;
m_sockaddr.sin_port = htons( port );
等等。這四個函數(shù),我開始不知道為什么取這些名字總是記不住,后來想明白了
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);

這兩個函數(shù)用來把表示ip地址的字符串(如:202.114.14.12)跟表示ip的long或者結(jié)構(gòu)之間轉(zhuǎn)換。
inet_addr得到的是已經(jīng)統(tǒng)一字節(jié)順序的,可以直接賦值給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表示錯誤。第一個參數(shù)是版本號,現(xiàn)在最高版本是2.2版,不過Win CE好像只支持1.1版,高位字節(jié)表示副版本號,低位字節(jié)表示高版本號,所以這里一般就是0x0202或者0x0101或者使用宏定義MAKEWORD(2,2)或者MAKEWORD(1,1),第二個參數(shù)是一個與winsock庫信息有關(guān)的結(jié)構(gòu),一把不用去管它。在使用winsock前,都必須加載,一般在程序初始化時候做這個事情。一般使用如下:
?WSADATA data;
?if ( WSAStartup(0x0202,&data) != 0 )
?{
??printf("error id: %d",GetLastError());
?}
上面的GetLastError()是使用非常頻繁的函數(shù)。很多函數(shù)的返回值得意義都是表示函數(shù)執(zhí)行是否出錯。當(dāng)winsock的函數(shù)發(fā)生錯誤時,用GetLastError()可以得到最后一次發(fā)生錯誤的錯誤號。在.Net中有個工具:查找錯誤,輸入錯誤號,得到錯誤信息。

int gethostname(char* name,int namelen);
獲取主機名。輸入?yún)?shù)為緩沖區(qū)地址和大小。
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”這說明了一般用法的時候,要把數(shù)據(jù)拷貝出來,看看下面代碼:
?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);
根據(jù)ip地址得到主機信息。這里的ip必須是網(wǎng)絡(luò)字節(jié)順序的。示例代碼:
?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);
這個函數(shù)用來的得到socket的本地地址,但是前提是socket必須已經(jīng)bind或者已經(jīng)是連接上的。如果socket不是面向連接的話,比如udp,那得socket上有數(shù)據(jù)才行。
int getpeername(SOCKET s,struct sockaddr* name,int* namelen);
這個函數(shù)用來得到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等后面學(xué)select模型的時候再仔細(xì)研究。



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

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

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品男gay被猛男狂揉视频| 欧美激情综合网| 欧美日韩国产精品一区二区亚洲| 亚洲精品乱码久久久久久| 欧美xx视频| 在线一区二区三区做爰视频网站| 国产一区二区三区在线观看网站| 在线中文字幕不卡| 欧美一级久久久久久久大片| 狠狠色丁香婷婷综合| 农村妇女精品| 日韩视频在线一区| 欧美亚洲一区二区在线| 国产自产v一区二区三区c| 狂野欧美一区| 亚洲欧美日韩综合| 一区二区三区精品久久久| 国内一区二区三区在线视频| 欧美日韩午夜| 久久手机免费观看| 亚洲欧美日韩成人| 亚洲开发第一视频在线播放| 久久男女视频| 久久久久国产精品厨房| 欧美亚洲在线视频| 在线亚洲+欧美+日本专区| 亚洲日本一区二区| 欧美成人中文字幕在线| 欧美激情bt| 久久综合中文字幕| 久久久久久久97| 久久国产精品高清| 久久婷婷色综合| 欧美精品一区在线播放| 一区二区激情| 欧美国产一区视频在线观看 | 久久免费99精品久久久久久| 欧美国产大片| 国产亚洲一本大道中文在线| 一区二区三区四区蜜桃| 免费看av成人| 午夜精品久久久久影视 | 免费观看成人www动漫视频| 国产精品久久久一区麻豆最新章节 | 欧美国产日韩精品| 欧美专区福利在线| 国产精品夜夜夜| 亚洲福利视频在线| 久久综合中文| 欧美一区二区三区四区在线| 国产精品乱码人人做人人爱| 99re6热在线精品视频播放速度| 久久久久国产一区二区| 亚洲欧美精品中文字幕在线| 欧美性做爰毛片| 一本色道久久综合狠狠躁篇怎么玩 | 久久婷婷成人综合色| 国产欧美日韩亚洲| 欧美影片第一页| 亚洲综合精品自拍| 国产日韩精品综合网站| 欧美中文在线观看| 欧美一区二区三区免费视| 国产精品亚洲а∨天堂免在线| 亚洲一区二区三| 亚洲午夜精品一区二区| 欧美四级电影网站| 亚洲欧美经典视频| 日韩网站在线观看| 欧美三级在线| 亚洲精品久久久久久一区二区| 久久er99精品| 欧美一区二区三区免费大片| 国产一区二区三区在线观看免费视频| 欧美一区二区免费观在线| 亚洲女同精品视频| 韩国成人理伦片免费播放| 两个人的视频www国产精品| 久久久久久久久久久久久女国产乱 | 亚洲国产成人精品久久| 欧美成在线观看| 欧美精品三级| 久久成人免费网| 久久精品中文字幕一区二区三区| 亚洲第一成人在线| 一本一本久久| 国产午夜精品福利| 欧美国产综合| 国产精品久久久久久久久久妞妞 | 性欧美激情精品| 久久久久99| 一本久久综合亚洲鲁鲁| 亚洲在线一区| 韩国一区二区在线观看| 91久久综合亚洲鲁鲁五月天| 欧美三日本三级三级在线播放| 久久精品视频在线| 欧美久久久久| 久久久久久尹人网香蕉| 欧美激情按摩| 久久精视频免费在线久久完整在线看| 欧美成人精品激情在线观看| 午夜亚洲性色福利视频| 久久裸体艺术| 亚洲综合欧美日韩| 久久综合伊人| 久久成人国产精品| 欧美日韩精品三区| 久热精品视频在线| 国产精品99免费看 | 麻豆精品在线播放| 国产精品久久久久av| 欧美xxx成人| 国产精品有限公司| 亚洲精品资源| 亚洲激情视频网| 欧美中文字幕久久| 亚洲香蕉在线观看| 欧美日韩精品一区| 亚洲国产天堂久久综合网| 狠狠久久亚洲欧美专区| 亚洲在线观看视频网站| 亚洲欧美日本视频在线观看| 欧美另类视频在线| 你懂的国产精品永久在线| 国产一区999| 中文日韩在线| 亚洲天堂免费观看| 欧美日韩成人在线| 亚洲欧洲视频在线| 亚洲啪啪91| 久久这里只有| 欧美xx视频| 亚洲国语精品自产拍在线观看| 久久国产视频网| 久久久久久夜精品精品免费| 国产日韩欧美在线观看| 欧美一区午夜视频在线观看| 久久精品盗摄| 狠狠入ady亚洲精品| 久久久久久亚洲精品中文字幕 | 亚洲视频 欧洲视频| 一区二区三区产品免费精品久久75| 久久综合国产精品| 亚洲国产精品久久久| 亚洲国产天堂久久综合| 欧美成人三级在线| 亚洲美女视频网| 亚洲在线免费| 国产精品久久看| 欧美影院久久久| 美女任你摸久久| 亚洲欧洲精品成人久久奇米网| 久久夜色精品国产欧美乱极品| 欧美激情中文字幕乱码免费| av不卡免费看| 国产日韩1区| 美女福利精品视频| 亚洲人体一区| 欧美专区亚洲专区| 在线看片欧美| 欧美日韩另类综合| 欧美在线啊v| 亚洲精品1区2区| 亚洲欧美精品中文字幕在线| 国产专区欧美精品| 欧美精品啪啪| 午夜精品一区二区三区四区 | 国产一区清纯| 欧美大片专区| 亚洲一区三区视频在线观看| 六月婷婷久久| 亚洲一区免费看| 狠狠色噜噜狠狠色综合久| 欧美精品免费在线| 欧美中文字幕在线播放| 亚洲日本在线观看| 久久国产精品久久久久久电车| 亚洲国产另类久久久精品极度| 国产精品久久97| 久久亚洲午夜电影| 亚洲在线中文字幕| 亚洲片在线观看| 玖玖玖国产精品| 亚洲欧美三级伦理| 亚洲精品乱码| 亚洲第一网站| 欧美日一区二区在线观看 | 欧美香蕉大胸在线视频观看| 欧美在线一二三| 99re6热只有精品免费观看| 蜜桃av一区二区| 欧美一区二区精品| 亚洲精品视频在线| 国内揄拍国内精品久久| 国产精品久久久久久av福利软件 | 亚洲国产综合在线| 另类成人小视频在线| 久久超碰97人人做人人爱| 亚洲自拍高清|