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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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在线精品免费视频九九视| 亚洲人永久免费| 亚洲欧美一区二区激情| 国产精品久久久对白| 亚洲永久在线观看| 午夜精品久久久久久99热软件| 国产精品欧美在线| 久久精品在这里| 欧美成人a视频| 亚洲一区二三| 久久国产精品一区二区三区四区| 激情欧美日韩一区| 亚洲国产黄色片| 国产精品国产精品国产专区不蜜| 久久国产精品99精品国产| 久久久国产精品一区二区中文| 亚洲茄子视频| 亚洲一区二区三区四区五区黄| 国模私拍视频一区| 亚洲人成网站影音先锋播放| 国产麻豆精品在线观看| 欧美承认网站| 国产精品午夜av在线| 免费成人你懂的| 国产精品免费福利| 欧美激情中文不卡| 国产日韩欧美在线看| 亚洲国产成人精品久久久国产成人一区 | 亚洲精品午夜| 亚洲欧美另类在线观看| 亚洲精品一区在线观看香蕉| 午夜免费电影一区在线观看| 亚洲美女精品一区| 久久动漫亚洲| 亚洲欧美日韩视频一区| 欧美大片免费| 免费毛片一区二区三区久久久| 国产精品不卡在线| 欧美高清视频在线| 国产在线拍偷自揄拍精品| 日韩午夜一区| 亚洲免费av电影| 麻豆精品传媒视频| 久久美女艺术照精彩视频福利播放| 欧美精品一区二区精品网| 久久综合久色欧美综合狠狠| 国产精品v日韩精品| 亚洲国产天堂久久综合网| 一区二区在线观看av| 亚洲欧美日韩一区二区在线 | 国产精品三级久久久久久电影| 欧美激情第五页| 在线免费观看成人网| 久久国产精彩视频| 久久久久国产免费免费| 国产精品一区久久久| 亚洲视频狠狠| 亚洲免费中文| 国产精品视频区| 亚洲一二三区在线观看| 亚洲专区在线视频| 国产精品另类一区| 中日韩高清电影网| 午夜精品视频在线观看| 国产精品久久久99| 午夜免费在线观看精品视频| 性色av一区二区三区红粉影视| 国产精品电影在线观看| 亚洲一区二区三区777| 亚洲欧美另类在线观看| 国产精品系列在线播放| 亚久久调教视频| 久久综合成人精品亚洲另类欧美 | 国产精品va| 亚洲制服丝袜在线| 久久躁狠狠躁夜夜爽| 亚洲国产欧美精品| 欧美日韩国产综合一区二区| 亚洲最快最全在线视频| 性欧美大战久久久久久久久| 国产情人节一区| 久久综合网hezyo| 亚洲国产精品一区在线观看不卡 | 亚洲理论电影网| 午夜精品久久| 伊人狠狠色j香婷婷综合| 欧美成人一区在线| 亚洲一区二区三区高清| 久久午夜精品| 夜夜嗨av一区二区三区免费区| 国产精品国产自产拍高清av王其| 亚洲欧美在线看| 欧美激情女人20p| 亚洲欧美卡通另类91av| 伊甸园精品99久久久久久| 欧美日本一区二区视频在线观看| 亚洲视频一区二区| 欧美超级免费视 在线| 亚洲男人第一av网站| 精品999日本| 欧美视频中文字幕| 久久免费视频观看| 亚洲伊人一本大道中文字幕| 女仆av观看一区| 亚洲欧美日韩国产成人| 亚洲欧洲一区二区三区| 国产精品一级久久久| 欧美成人a视频| 久久精品国产免费| 亚洲视频在线看| 亚洲欧洲精品一区二区精品久久久| 羞羞视频在线观看欧美| 亚洲美女视频在线观看| 国内免费精品永久在线视频| 欧美视频一区| 欧美福利一区二区| 久久精品99国产精品酒店日本| 一区二区三区免费看| 亚洲欧洲日产国产综合网| 久久综合999| 久久国产高清| 香蕉视频成人在线观看| 中文在线资源观看网站视频免费不卡| 在线观看的日韩av| 国产亚洲欧美日韩日本| 国产精品视频一二| 国产精品成人免费精品自在线观看| 麻豆成人在线播放| 久久久亚洲国产天美传媒修理工| 亚洲欧美一区二区激情| 亚洲一级在线观看| 亚洲一二三四久久| 亚洲一区二区免费在线| 亚洲视频碰碰| 亚洲欧美成人网| 亚洲免费视频中文字幕| 亚洲香蕉网站| 亚洲欧美变态国产另类| 亚洲欧美日韩在线不卡| 亚洲欧美日韩成人| 午夜日本精品| 久久精品夜色噜噜亚洲aⅴ| 欧美呦呦网站| 久久综合图片| 欧美激情aaaa| 欧美三级电影大全| 国产精品久久夜| 国产一区二区三区av电影 | 欧美视频在线视频| 国产精品一级| 一区免费视频| 亚洲日本无吗高清不卡| 一本色道**综合亚洲精品蜜桃冫| av成人免费| 亚洲欧美综合| 久久网站免费| 亚洲日本久久| 亚洲一区二区三| 久久国产一二区| 欧美成人午夜影院| 国产精品国产三级国产aⅴ无密码| 国产精品伦理| 亚洲第一二三四五区| 一区二区福利| 久久国产精品电影| 亚洲国产另类久久久精品极度| 一区二区高清| 久久精品亚洲| 欧美日韩精品高清| 国内成人精品2018免费看| 亚洲精品亚洲人成人网| 亚洲欧美在线看| 欧美激情第一页xxx| 亚洲一区二区视频在线| 久久婷婷麻豆| 国产精品久久777777毛茸茸| 激情欧美丁香| 午夜精品福利一区二区三区av| 久久一区中文字幕| 一区二区三区欧美在线观看| 久久青青草原一区二区| 欧美性理论片在线观看片免费| 一区二区三区无毛| 亚洲欧美日韩人成在线播放| 欧美黑人国产人伦爽爽爽| 中国日韩欧美久久久久久久久| 久久久久久久网站| 国产精品久久久亚洲一区 | 日韩小视频在线观看| 久久九九全国免费精品观看| 亚洲免费大片| 亚洲一区二区毛片| 美女精品在线| 午夜精品视频在线| 欧美视频在线观看免费网址| 亚洲黄色影片| 久久午夜色播影院免费高清| 亚洲综合色在线| 国产精品久久久久aaaa九色| 亚洲免费高清|