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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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>
            日韩视频免费在线观看| 亚洲人成人一区二区在线观看| 亚洲人成网站色ww在线| 久久一区二区三区超碰国产精品| 狠狠色狠狠色综合日日91app| 久久精品av麻豆的观看方式| 欧美一区综合| ●精品国产综合乱码久久久久| 欧美国产在线观看| 欧美成人激情在线| 中文在线不卡| 亚洲欧美中文在线视频| 国内精品国产成人| 亚洲成人在线视频网站| 欧美精品18videos性欧美| 亚洲午夜电影在线观看| 亚洲欧美日韩一区在线| 1024精品一区二区三区| 亚洲精品中文字幕女同| 国产女主播一区二区三区| 免费观看一级特黄欧美大片| 欧美精品一区视频| 午夜久久久久久| 久久久久久久网站| 中文高清一区| 久久9热精品视频| 99国内精品久久| 午夜精品久久久久久久白皮肤| 揄拍成人国产精品视频| 9久草视频在线视频精品| 国产一区二区在线免费观看| 91久久精品美女| 国产欧美日韩精品丝袜高跟鞋 | 国产精品私房写真福利视频| 久久这里只有| 欧美色精品在线视频| 久久精品一本| 欧美日韩另类一区| 久久久久久久综合日本| 欧美日韩国产免费观看| 久久天天躁狠狠躁夜夜av| 欧美久久久久久久久| 久久先锋资源| 国产精品伦一区| 亚洲国产另类久久久精品极度| 国产麻豆午夜三级精品| 99爱精品视频| 亚洲精品国产视频| 久久精品视频播放| 欧美在线播放视频| 国产精品福利av| 亚洲精品美女在线| 亚洲国产精品一区二区尤物区| 午夜视频一区二区| 亚洲一区亚洲二区| 欧美精品激情在线观看| 免播放器亚洲| 狠狠久久亚洲欧美专区| 亚洲欧美在线高清| 亚洲女优在线| 国产精品久久一卡二卡| 亚洲精品国产品国语在线app | 欧美二区在线观看| 葵司免费一区二区三区四区五区| 国产精品视频成人| 国产精品99久久99久久久二8| 亚洲免费av片| 欧美日韩ab| 亚洲精品欧美日韩专区| 日韩午夜黄色| 欧美日韩国产一区二区三区地区| 亚洲人成亚洲人成在线观看| 亚洲黄色免费| 欧美成人中文| 亚洲美女在线一区| 亚洲影院色在线观看免费| 欧美午夜一区二区三区免费大片| 日韩午夜中文字幕| 亚洲永久在线| 国产日韩欧美在线看| 久久福利毛片| 欧美成人在线免费观看| 日韩午夜黄色| 国产精品国产自产拍高清av| 亚洲视频一二区| 久久精品视频一| 在线观看91精品国产麻豆| 噜噜噜久久亚洲精品国产品小说| 欧美成人xxx| 一本色道久久综合亚洲91| 国产精品成人观看视频国产奇米| 亚洲香蕉网站| 噜噜噜噜噜久久久久久91| 亚洲精选视频免费看| 欧美调教vk| 久久精品国产免费| 亚洲日本激情| 欧美在线视频一区| 亚洲激情成人| 国产精品美女久久久浪潮软件| 久久不见久久见免费视频1| 欧美激情一区二区三区在线视频观看 | 久久精品国产99国产精品| 欧美国产视频在线| 亚洲欧美999| 在线观看国产精品淫| 欧美久久久久久| 欧美在线一二三区| 亚洲人成啪啪网站| 久久国产一二区| 一本到高清视频免费精品| 国产欧美亚洲视频| 欧美精品激情在线| 久久精品国产一区二区三| 亚洲乱码精品一二三四区日韩在线 | 亚洲一区国产| 亚洲电影免费观看高清完整版在线观看| 欧美久久久久中文字幕| 久久国产精品亚洲77777| 日韩午夜黄色| 久久夜色精品国产欧美乱| 亚洲伊人网站| 国产精品日韩欧美一区二区| 欧美成人中文| 国产一区二区高清不卡| 欧美一区二区三区播放老司机| 亚洲国产一区二区三区高清| 亚洲肉体裸体xxxx137| 麻豆精品在线视频| 亚洲第一精品电影| 国产视频久久久久| 国产精品久久久久久妇女6080| 老牛嫩草一区二区三区日本 | 亚洲国产日韩在线| 国模叶桐国产精品一区| 欧美午夜久久| 欧美日韩视频在线一区二区| 欧美高清在线播放| 美日韩精品免费| 久久精品国产久精国产爱| 先锋亚洲精品| 西瓜成人精品人成网站| 亚洲在线观看视频| 在线中文字幕日韩| 一区二区三区日韩欧美精品| 亚洲片在线观看| 亚洲国产美女精品久久久久∴| 母乳一区在线观看| 欧美1区3d| 欧美激情精品久久久久| 欧美国产三区| 亚洲欧洲日韩女同| 日韩午夜激情电影| 亚洲视频在线观看视频| 亚洲婷婷在线| 欧美在线播放一区| 久久人人爽人人爽爽久久| 久久综合久久综合九色| 米奇777在线欧美播放| 欧美激情一区二区三级高清视频| 欧美精品七区| 国产精品视频观看| 国产一区二区在线观看免费播放| 国产一区二区三区精品欧美日韩一区二区三区 | 国内在线观看一区二区三区| 韩国在线一区| 91久久午夜| 一区二区三区视频观看| 亚洲影院在线| 久久久午夜视频| 亚洲国产精品视频| 中文欧美日韩| 久久久爽爽爽美女图片| 欧美精品一区三区| 国产午夜精品一区理论片飘花 | 欧美激情一二三区| 国产精品久久久久国产精品日日| 国产婷婷97碰碰久久人人蜜臀| 狠狠狠色丁香婷婷综合激情| 亚洲日韩成人| 欧美专区日韩视频| 亚洲电影中文字幕| 国产精品99久久久久久宅男| 久久精品国产精品| 欧美精品日韩一本| 国内精品久久久久久| 亚洲精品日日夜夜| 欧美一区二区三区在线免费观看| 免费观看30秒视频久久| 一本久道久久久| 久久久久久香蕉网| 国产精品久久久久一区二区| 亚洲国产精品久久人人爱蜜臀 | 亚洲国产精品99久久久久久久久| 一区二区久久| 欧美成人性网| 久久疯狂做爰流白浆xx| 国产精品超碰97尤物18| 亚洲高清不卡一区| 久久久国际精品|