锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
]]>
]]>
CString strMac;
NCB ncb;
ADAPTER_STATUS adapt;
memset(&ncb,0,sizeof(ncb));
ncb.ncb_command = NCBRESET;
//棣栧厛瀵圭綉鍗″彂閫佷竴涓狽CBRESET鍛戒護浠ヤ究榪涜鍒濆鍖?nbsp;
Netbios(&ncb);
ncb.ncb_command = NCBASTAT;
strcpy((char *)ncb.ncb_callname,"*");
// 鎸囧畾榪斿洖鐨勪俊鎭瓨鏀劇殑鍙橀噺
ncb.ncb_buffer = (unsigned char *)&adapt;
ncb.ncb_length = sizeof(adapt);
// 鍙戦丯CBASTAT鍛戒護浠ヨ幏鍙栫綉鍗$殑淇℃伅
Netbios(&ncb);
// 鎶婄綉鍗AC鍦板潃鏍煎紡鍖栨垚甯哥敤鐨?6榪涘埗褰㈠紡
strMac.Format( "%02X%02X-%02X%02X-%02X%02X\n",
adapt.adapter_address[0],
adapt.adapter_address[1],
adapt.adapter_address[2],
adapt.adapter_address[3],
adapt.adapter_address[4],
adapt.adapter_address[5]);
m_edit.SetWindowText(strMac);
]]>
瀵煎叆搴?ws2_32.lib鍜屽ご鏂囦歡 afxsock.h
CString str="",name;
m_name.GetWindowText(name);
struct hostent * pHost;
pHost = gethostbyname(name);
for(int i=0;i<4;i++)
{
CString addr;
if(i > 0)
{
str += ".";
}
addr.Format("%u",(unsigned int)((unsigned char*)pHost->h_addr_list[0])[i]);
str += addr;
}
m_ip.SetWindowText(str);
m_grid.InsertColumn(0,"灞鍩熺綉鍐呭伐浣滅粍",LVCFMT_LEFT,220,0);
DWORD nSize = MAX_COMPUTERNAME_LENGTH + 1;
char Buffer[MAX_COMPUTERNAME_LENGTH + 1];
GetComputerName(Buffer,&nSize);//寰楀埌涓繪満鍚?/span>
m_edit.SetWindowText(Buffer);//鏄劇ず涓繪満鍚?/span>
DWORD Count=0xFFFFFFFF,Bufsize=4096,Res;
NETRESOURCE* nRes;
NETRESOURCE* nRes1;
HANDLE lphEnum;
LPVOID Buf = new char[4096];
LPVOID Bufwg = new char[4096];
//--------------------------------------------------------------------
//WNetOpenEnum鍚姩緗戠粶璧勬簮榪涜鏋氫婦
Res = WNetOpenEnum(RESOURCE_GLOBALNET, //鏋氫婦鑼冨洿涓哄叏鐞冪綉緇滆祫婧?/span>
RESOURCETYPE_ANY, //鏋氫婦綾誨瀷涓烘墍鏈夌被鍨?/span>
RESOURCEUSAGE_CONTAINER,//All container resources.
NULL,//絀烘寚閽?/span>
&lphEnum); //瀛樺偍鏋氫婦榪囩▼鍙ユ焺鐨勫彉閲?br>
//WNetEnumResource鑾峰緱鏋氫婦鐨勭綉緇滆祫婧?/span>
Res=WNetEnumResource(lphEnum,//鐢盬NetOpenEnum鍑芥暟浼犲叆
&Count,//鑾峰彇鐨勮祫婧愮殑鏈澶ф暟鐩?/span>
Buf,//鎸囧悜瀛樺偍鏋氫婦緇撴灉鐨勭紦鍐插尯鍦板潃鐨勬寚閽?/span>
&Bufsize);//鎸囧悜瀛樺偍緙撳啿鍖哄ぇ灝忕殑鍙橀噺鍦板潃鐨勬寚閽?br>
//瀛樺偍緗戠粶璧勬簮鐨勭粨鏋勪綋
nRes=(NETRESOURCE*)Buf;//榪斿洖Microsoft Terminal Services
//----------------閫氳繃寰幆鏋氫婦褰撳墠璧勬簮鐨勪笅涓灞傝祫婧?--------------------
for(DWORD n=0;n<Count;n++,nRes++)
{
DWORD NUM= 0xFFFFFFFF;
Res = WNetOpenEnum(RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
0,//All resources.
nRes,// nRes=(NETRESOURCE*)Buf;
&lphEnum);
Res=WNetEnumResource(lphEnum,&NUM,Bufwg,&Bufsize);
int num= Bufsize/sizeof(NETRESOURCE);//緹ょ粍鏁扮洰
nRes1=(NETRESOURCE*)Bufwg;
//寰幆鏋氫婦姣忎竴涓伐浣滅粍鍚?/span>
for(DWORD i=0;i<NUM;i++,nRes1++)
{
m_grid.InsertItem(i,0);
m_grid.SetItemText(i,0,nRes1->lpRemoteName);
}
}
//--------------------------------------------------------------------
delete Buf;
delete Bufwg;
WNetCloseEnum(lphEnum);

/**//******************************************
紼嬪簭鍚嶇О錛歴ocketopt.cpp
紼嬪簭鍔熻兘錛氳紼嬪簭婕旂ず浜唃etsockopt()鍑芥暟鍜宻etsockopt()鍑芥暟鐢ㄦ硶
changshoumeng */
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib,"ws2_32.lib")
void main()

{
WSADATA wsaData;
SOCKET s;
int optname;//瀛樻斁閫夐」鐨勫?/span>
int optlen;//閫夐」鐨勯暱搴?/span>
if(WSAStartup(MAKEWORD(2,2),&wsaData) !=0)
{
printf("Failed to load winsock. \n");
return;
}
s = socket(AF_INET,SOCK_STREAM,0);//鍒涘緩涓涓鎺ュ彛
if(s == INVALID_SOCKET)
{
printf("socket() Error \n");
return;
}
optlen = sizeof(optname);
printf("---------------------------\n");
//鑾峰緱濂楁帴鍙g被鍨?/span>
if(getsockopt(s,SOL_SOCKET,SO_TYPE,(char *)&optname,&optlen) ==SOCKET_ERROR)
{
printf("getsockopt() Error: %u \n",WSAGetLastError());
return;
}
printf("浠ヤ笅淇℃伅鏄敱getsockopt()鍑芥暟鍙栧緱鐨凷O_SOCKET 綰у埆閫夐」瀹炰緥\n");
switch(optname)
{
case SOCK_STREAM: printf("SO_TYPE:SOCK_STREAM \n");break;
case SOCK_DGRAM : printf("SO_TYPE:SOCK_DGRAM \n");break;
case SOCK_RAW : printf("SO_TYPE:SOCK_RAW \n");break;
}
//鑾峰彇鎺ユ敹緙撳啿鍖虹殑澶у皬
if(getsockopt(s,SOL_SOCKET,SO_RCVBUF,(char *)&optname,&optlen) ==SOCKET_ERROR)
{
printf("getsockopt() Error: %u \n",WSAGetLastError());
return;
}
printf("SO_RCVBUF:%d \n",optname);
//鑾峰彇鍙戦佺紦鍐插尯鐨勫ぇ灝?/span>
if(getsockopt(s,SOL_SOCKET,SO_SNDBUF,(char *)&optname,&optlen) ==SOCKET_ERROR)
{
printf("getsockopt() Error: %u \n",WSAGetLastError());
return;
}
printf("SO_SNDBUF:%d \n",optname);
optname = 16*1024;
//閲嶆柊璁劇疆緙撳啿鍖虹殑澶у皬
if(setsockopt(s,SOL_SOCKET,SO_RCVBUF,(char *)&optname,sizeof(optname) )== SOCKET_ERROR)
{
printf("setsockopt() Error: %u \n",WSAGetLastError());
return;
}
//鑾峰彇閲嶆柊璁劇疆鐨勬帴鏀剁紦鍐插尯鐨勫ぇ灝?/span>
if(getsockopt(s,SOL_SOCKET,SO_RCVBUF,(char *)&optname,&optlen) == SOCKET_ERROR)
{
printf("getsockopt() Error: %u \n",WSAGetLastError());
return;
}
printf("---------------------\n");
printf("浣跨敤setsockopt()鍑芥暟璁劇疆鍚庡啀鍙栧緱鐨凷O_RCVBUF鏁板糪n");
printf("SO_RCVBUF:%d \n",optname);
printf("---------------------\n");
WSACleanup();
}

/**//***************************************************
璋冭瘯鐜錛歏C++6.0
紼嬪簭鍚嶇О錛歨ost.cpp
紼嬪簭鍔熻兘錛氳紼嬪簭浣跨敤緗戠粶淇℃伅鑾峰彇鍑芥暟鍙栧緱涓繪満鐨勬湁鍏充俊鎭紝
浣跨敤浠ヤ笅涓変釜鍑芥暟錛?br>
gethostname()
gethostbyname()
getprotobyname()
*************************************changshoumeng*/
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib,"ws2_32.lib")
void main()

{
WSADATA wsaData;
int n;
char hostname[256];
hostent *pHostent;//涓繪満淇℃伅鎸囬拡
protoent *pProtoent;//涓繪満鍗忚鎸囬拡
struct sockaddr_in sa;//鏈満鍦板潃淇℃伅
if(WSAStartup(MAKEWORD(2,2),&wsaData) !=0)
{
printf("Failed to load Winsock. \n");
return ;
}
printf("--------------------\n");
if(gethostname(hostname,sizeof(hostname)) !=0)
{
printf("gethostname() Error:%d \n",WSAGetLastError());
return;
}
printf("浠ヤ笅淇℃伅鏄敱gethostname()鍑芥暟鍙栧緱\n ");
printf("Local host name: %s \n",hostname);
printf("-------------------\n");
pHostent =gethostbyname(hostname);//榪斿洖鎸囧畾涓繪満鍚嶇殑淇℃伅
if(pHostent ==NULL)
{
printf("gethostbyname() Error: %u \n",WSAGetLastError());
return;
}
printf("浠ヤ笅淇℃伅鐢眊ethostbyname()鍑芥暟鍙栧緱\n");
printf("name:%s\n aliases:%d\n addrtype:%d\n length:%d\n",
pHostent->h_name,//鍚嶇О
pHostent->h_aliases,//鍒悕
pHostent->h_addrtype,//鍦板潃綾誨瀷
pHostent->h_length );//鍦板潃闀垮害
for(n=0;pHostent->h_addr_list[n];n++)
{
memcpy(&sa.sin_addr.s_addr,pHostent->h_addr_list[n], pHostent->h_length);
printf("Address:%s \n",inet_ntoa(sa.sin_addr));//涓繪満鍦板潃鍗矷P鍦板潃
}
printf("-------------------\n");
pProtoent = getprotobyname("tcp");//榪斿洖鎸囧畾鍗忚鐨勪俊鎭?/span>
if(pProtoent == NULL)
{
printf("getprotobyname() Error: %u \n",WSAGetLastError());
return;
}
printf("浠ヤ笅淇℃伅鐢?nbsp;getprotobyname()鍑芥暟鍙栧緱 \n");
printf("name:%s \n proto:%d \n",
pProtoent->p_name,//鍗忚鍚?/span>
pProtoent->p_proto );//浠ヤ富鏈洪『搴忔帓鍒楃殑鍗忚鍙?/span>
for(n=0;pProtoent->p_aliases[n];n++)
{
printf("aliases: %s \n",pProtoent->p_aliases[n]);
}
WSACleanup();
}
緗戠粶搴旂敤紼嬪簭璁捐錛屾渶鍩烘湰鐨勪袱涓棶棰樻槸錛?/span>鈶?/span>閫氫俊鐨勮繘紼?strong style="mso-bidi-font-weight: normal">濡備綍鐩鎬簰璇嗗埆錛?/span>鈶?/span>鍙屾柟閲囩敤鎬庢牱鐨勬柟寮?strong style="mso-bidi-font-weight: normal">榪涜鑱旂郴銆?/span>
浠涔堟槸緗戠粶搴旂敤紼嬪簭錛?/span>
搴旂敤紼嬪簭鍙互綆鍗曞湴鍒嗕負錛?/span>
鈶?/span>鏃犻氫俊搴旂敤紼嬪簭
鈶?/span>閫氫俊鐨勫簲鐢ㄧ▼搴忥紙緗戠粶搴旂敤紼嬪簭錛?/span>
榪涚▼闂撮氫俊鐨勯棶棰樺彲浠ュ垎涓轟袱縐嶏細
鈶?/span>鍗曞嚮緋葷粺鐨勮繘紼嬮氫俊銆傛秷鎭佷俊鍙烽噺銆佸叡浜瓨鍌ㄥ尯銆?/span>
鈶?/span>涓嶅悓緋葷粺鐨勮繘紼嬨?span style="COLOR: red">緗戠粶閫氫俊鍗忚銆?/span>
緗戠粶搴旂敤紼嬪簭鐨勮瘑鍒棶棰?/span>
鍗婄浉鍏?/span>錛氫負浜嗗敮涓鍦版爣璇嗙綉緇滀腑閫氫俊鐨勪竴涓繘紼嬶紝鍗抽氫俊涓鏂癸紝灝辮浣跨敤涓涓涓嬬殑涓夊厓緇勶細
錛堟湰鍦板崗璁紝鏈湴IP鍦板潃錛屾湰鍦扮鍙e彿錛?/span>
鐩稿叧錛氫竴涓簲鍏冪粍鍙互鍞竴鏍囪瘑緗戠粶涓袱涓氫俊鐨勮繘紼嬫垨涓鏉¤繛鎺?/span>
錛堝崗璁紝鏈湴IP鍦板潃錛屾湰鍦扮鍙e彿錛岃繙紼?/span>IP鍦板潃錛岃繙紼嬬鍙e彿錛?/span>
緗戠粶紼嬪簭鑱旂郴鐨勬ā鍨嬶細瀹㈡埛/鏈嶅姟鍣?/span>
鏈嶅姟鍣ㄧ殑鍒嗙被錛?/span>
涓茶鏈嶅姟鍣?/span>錛氭湇鍔″櫒鍙湁涓涓繘紼嬬敤涓茶鐨勬柟寮忓瀹㈡埛鍦拌姹傛彁渚涙湇鍔★紱
騫跺彂鏈嶅姟鍣?/span>錛氭湇鍔″櫒鍙互涓哄垎鍒瘡涓鎴瘋姹傚垱寤鴻繘紼嬫垨綰跨▼騫舵彁渚涙湇鍔★紱
鏈嶅姟鍣ㄧ壒鐐癸細
1. 鏈嶅姟榪涚▼涓鑸湪鍚姩鍚庡氨涓鐩磋繍琛岋紝浠ョ瓑寰呭鎴瘋姹傜殑鍒版潵錛岄櫎闈炴湇鍔¤紱佹鎴栨墽琛屽己榪粓姝㈡湇鍔$▼搴忋?/span>
2. 鏈嶅姟鍣ㄦ柟榪涚▼浣跨敤鐨勬槸浼楁墍鍛ㄧ煡鐨勭鍙?/span>錛屽惁鍒欏鎴鋒棤娉曠煡閬撴彁渚涙湇鍔$殑绔彛
3. 鏈嶅姟鍣ㄦ柟閫氬父鎷ユ湁杈冨鐨勮祫婧愩?/span>
4. 鏈嶅姟鍣ㄦ柟榪涚▼鍙互騫惰澶勭悊澶氫釜瀹㈡埛鐨勮姹傦紝浣嗗彲浠ュ悓鏃跺鐞嗙殑瀹㈡埛璇鋒眰鏁扮洰鏄湁涓瀹氶檺鍒剁殑 銆?/span>
5. 鏈嶅姟鍣ㄦ柟鍦ㄩ氫俊鏃跺睘浜?span style="COLOR: red">琚姩鐨勪竴鏂廣?/span>
瀹㈡埛鏂癸細
1. 鍦?u>闇瑕佹湇鍔℃椂鍚戞湇鍔″櫒鎻愬嚭璇鋒眰錛岃姹傜殑鏈嶅姟寰楀埌婊¤凍騫跺畬鎴愬鐞嗕換鍔″悗錛屽氨緇堟瀹㈡埛紼嬪簭鐨勬墽琛?/span>銆?/span>
2. 浣跨敤鍚戠郴緇熺敵璇風殑涓存椂绔彛涓庢湇鍔″櫒鏂硅繘紼嬭繘琛岄氫俊銆?/span>
3. 鎷ユ湁鐩稿杈冨皯鐨勮祫婧愩?/span>
4. 瀹㈡埛鏂瑰湪閫氫俊鏃跺睘浜?span style="COLOR: red">涓誨姩鐨勪竴鏂廣?/span>
Socket緙栫▼絎旇浜岋細Tcp/ip搴旂敤紼嬪簭宸ヤ綔妯″瀷涓庣綉緇滅紪紼嬫帴鍙?/span>
Tcp/ip鍗忚鐨勬牳蹇冨唴瀹硅灝佽鍒版搷浣滅郴緇熶腑錛岀郴緇熸彁渚涚綉緇滅紪紼嬫帴鍙?/span>Windows Sockets鐢ㄤ簬緗戠粶紼嬪簭璁捐銆?/span>
Tcp/ip搴旂敤紼嬪簭宸ヤ綔妯″瀷
瀹㈡埛搴旂敤紼嬪簭 --------------------------鏈嶅姟鍣ㄥ簲鐢ㄧ▼搴?/span>
| |
緗戠粶緙栫▼鎺ュ彛- --------------------------緗戠粶緙栫▼鎺ュ彛
| |
TCP/IP鏍稿績鍗忚 ------------------------ TCP/IP鏍稿績鍗忚
| |
鐗╃悊浼犺緭浠嬭川 -------------------------- 鐗╃悊浼犺緭浠嬭川
鐢ㄦ埛鍦ㄨ繘琛?/span>TCP/IP紼嬪簭璁捐鏃訛紝鏈鍏抽敭鐨勯棶棰樻槸瑕佺啛鎮夋墍鐢ㄥ鉤鍙版彁渚涚殑緗戠粶緙栫▼鐣岄潰API銆?/span>
緗戠粶緙栫▼鎺ュ彛Winsock
Winsock鐨勭増鏈細
1. Winsock1.1 錛?/span>16浣嶏紝鐢?/span>Winsock.dll鏀寔
2. Winsock2.2 錛?/span>32浣嶏紝鐢?/span>Wsock32.dl鏀寔l
WinsockAPI鍑芥暟鍒嗙被錛?/span>
1. 涓?/span>BSDSoket錛?/span>Unix錛夌浉鍏煎鐨勫熀鏈嚱鏁?/span>
2. 緗戠粶鏁版嵁淇℃伅媯绱㈠嚱鏁?/span>
3. Windows涓撶敤鎵╁睍鍑芥暟
Socket緙栫▼絎旇涓夛細濂楁帴鍙g殑姒傚康涓庡叾緙栫▼鍘熺悊
濂楁帴鍙?/span>Soket
紼嬪簭A鈥斺?span style="COLOR: red">濂楁帴鍙?/span>鈥斺旂綉綆¤蔣浠垛斺旂綉鍗?/span> 緗戝崱鈥斺旂綉綆¤蔣浠垛斺?span style="COLOR: red">濂楁帴鍙?/span>鈥斺?strong style="mso-bidi-font-weight: normal">紼嬪簭B
鑻ヤ笉鑰冭檻閫氫俊榪囩▼涓殑緗戠粶鎺ュ彛鍗″拰浼犺緭浠嬭川絳夛紝鍒欑綉緇滈氫俊鐨勮繃紼嬪氨鏄敱鏁版嵁鐨勫彂閫佽呭皢瑕佸彂閫佺殑淇℃伅鍐欏叆涓涓鎺ュ彛錛屽啀閫氳繃涓棿鐜妭灝嗕俊鎭紶杈撳埌鎺ユ敹绔殑濂楁帴鍙d腑錛岀劧鍚庡氨鍙互鐢辨帴鏀剁鐨勫簲鐢ㄧ▼搴忓皢淇℃伅浠庡鎺ュ彛涓彇鍑?u>銆傚洜姝や袱涓▼搴忎箣闂寸殑鏁版嵁浼犺緭瑕侀氳繃濂楁帴鍙f潵瀹屾垚銆?/span>
濂楁帴鍙g殑鏈川錛氬氨鏄氫俊榪囩▼涓墍瑕佷嬌鐢ㄧ殑涓浜涚紦鍐插尯鍙婁竴浜涚浉鍏崇殑鏁版嵁緇撴瀯銆?/span>
濂楁帴鍙g殑鍒嗙被錛?/span>
1. 嫻佸紡濂楁帴鍙o紙SOCK_STREAM錛?/span>;Tcp鍗忚瀹炵幇瀛楃嫻佺殑浼犺緭
2. 鏁版嵁濂楁帴鍙o紙SOCK_DGRAM錛?/span>錛?/span>UDP鍗忚
3. 鍘熷濂楁帴鍙o紙SOCK_RAW錛夛紱搴曞眰鍗忚
濂楁帴鍙g殑緙栫▼鍘熺悊
鏈嶅姟鍣?/span>
Socket()寮鍚湇鍔♀斺?/span>bind()緇戝畾绔彛鈥斺?/span>listen()鐩戝惉璇鋒眰鈥斺?/span>accept()鎺ュ彈璇鋒眰鈥斺?/span>recv()鎺ユ敹鏁版嵁鈥斺?/span>send()鍙戦佹暟鎹斺?/span>closesocket()鍏抽棴濂楁帴鍙?/span>
瀹㈡埛鏂?/span>
Socket()璇鋒眰鏈嶅姟鈥斺?/span>connect()榪炴帴鏈嶅姟鍣ㄢ斺?/span>closesocket()鍏抽棴濂楁帴鍙?/span>
閿欒澶勭悊鏈哄埗
涓嶆垚鍔熺殑Winsock鍑芥暟璋冪敤榪斿洖鐨勬渶甯歌鐨勫兼槸瀹忓畾涔?/span>SOCKET _ERROR錛屽湪 Winsock鐨勫ご鏂囦歡涓?/span>(濡?/span> Winsock2.h)錛屽畠鐨勬暟鍊兼槸-1錛屽疄闄呬笂濡傛灉璋冪敤涓涓?/span>Winsock鍑芥暟鏃跺彂鐢熶簡閿欒錛屽垯搴旇榪涗竴姝ヤ嬌鐢?/span>WSAGetLastError()鍑芥暟錛屼互鑾峰緱瀵硅繖涓閿欒璇︾粏璇存槑銆傝鍑芥暟鐨勪嬌鐢ㄩ潪甯哥畝鍗曪紝鏍煎紡濡備笅錛?/span>
Int WSAGetLastError(void)
榪欐槸涓涓棤鍙傚嚱鏁幫紝璋冪敤鏃惰繑鍥炴渶鏂板彂鐢熺殑緗戠粶閿欒浠g爜銆?/span>
緗戠粶瀛楄妭欏哄簭
灝忓簭鍦ㄥ墠錛氬湪璧峰鍦板潃澶勫瓨鏀炬暣鏁扮殑浣庡簭鍙峰瓧鑺傘?span style="COLOR: red">涓繪満瀛楄妭欏哄簭銆?/span>
澶у簭鍦ㄥ墠錛氬湪璧峰鍦板潃澶勫瓨鏀炬暣鏁扮殑楂樺簭鍙峰瓧鑺傘?span style="COLOR: red">緗戠粶瀛楄妭欏哄簭銆?/span>
鍦?/span>Winsock涓湁涓緋誨垪鐨勫嚱鏁板彲鐢ㄤ簬澶氬瓧鑺傜殑杞崲錛屾妸瀹冧滑浠庝富鏈哄瓧鑺傞『搴忚漿鎹㈡垚緗戠粶瀛楄妭欏哄簭銆?/span>
htonl() ntohl()
WSAHtonl() WSANtohl()
htons() ntohs()
WSAHtons() WSANtohs()