SOCKET例子.docx
《SOCKET例子.docx》由会员分享,可在线阅读,更多相关《SOCKET例子.docx(11页珍藏版)》请在冰豆网上搜索。
![SOCKET例子.docx](https://file1.bdocx.com/fileroot1/2023-3/1/0c87ff67-e338-4167-ba63-9a250fb43245/0c87ff67-e338-4167-ba63-9a250fb432451.gif)
SOCKET例子
1.简单服务器
//#include
//#pragmacomment(lib,"WS2_32.lib")
WSADATAwsd;
staticUINTport=%%1;
UINTListen(LPVOIDpParam)
{
SOCKETsServer,sClient;
charbuf[1024];
intretVal;
if(WSAStartup(MAKEWORD(2,2),&wsd)!
=0)
{
return-1;//失败
}
sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET==sServer)
{
WSACleanup();
return-1;//创建套接字失败
}
SOCKADDR_INaddrServ;
addrServ.sin_family=AF_INET;
addrServ.sin_port=htons((short)pParam);
addrServ.sin_addr.s_addr=INADDR_ANY;
retVal=bind(sServer,(LPSOCKADDR)&addrServ,sizeof(SOCKADDR_IN));
if(SOCKET_ERROR==retVal)
{
closesocket(sServer);
WSACleanup();
return-1;//绑定套接字失败
}
retVal=listen(sServer,1);
if(SOCKET_ERROR==retVal)
{
closesocket(sServer);
WSACleanup();
return-1;//开始监听失败
}
sockaddr_inaddrClient;
intaddrClientlen=sizeof(addrClient);
sClient=accept(sServer,(sockaddrFAR*)&addrClient,&addrClientlen);
if(INVALID_SOCKET==sClient)
{
closesocket(sServer);
WSACleanup();
return-1;//开始接受客户端连接失败
}
ZeroMemory(buf,sizeof(buf));
retVal=recv(sClient,buf,sizeof(buf),0);
if(SOCKET_ERROR==retVal)
{
closesocket(sServer);
closesocket(sClient);
WSACleanup();
return-1;//接收数据失败
}
CString%%2(buf);
closesocket(sServer);
closesocket(sClient);
WSACleanup();
return0;
}
CWinThread*pThread=AfxBeginThread(Listen,&port);
2.简单客户端
//#include
//#pragmacomment(lib,"WS2_32.lib")
WSADATAwsd;
SOCKETsHost;
SOCKADDR_INservAddr;
charbuf[1024];
intretVal;
if(WSAStartup(MAKEWORD(2,2),&wsd)!
=0)
{
return-1;//失败
}
sHost=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET==sHost)
{
WSACleanup();
return-1;//创建套接字失败
}
servAddr.sin_family=AF_INET;
servAddr.sin_addr.s_addr=inet_addr(%%3);
servAddr.sin_port=htons((short)%%2);
intnServAddlen=sizeof(servAddr);
retVal=connect(sHost,(LPSOCKADDR)&servAddr,sizeof(servAddr));
if(SOCKET_ERROR==retVal){
closesocket(sHost);
WSACleanup();
return-1;//连接服务器失败
}
ZeroMemory(buf,sizeof(buf));
strcpy(buf,%%3);
retVal=send(sHost,buf,sizeof(buf),0);
if(SOCKET_ERROR==retVal)
{
closesocket(sHost);
WSACleanup();
return-1;//向服务器发送数据失败
}
closesocket(sHost);
WSACleanup();
3.获得本机IP
//#include
//#pragmacomment(lib,"WS2_32.lib")
WSADATAwsd;
if(WSAStartup(MAKEWORD(2,2),&wsd)!
=0)
{
return-1;//失败
}
charszHostname[100],szHostaddress[200];
if(gethostname(szHostname,sizeof(szHostname))!
=SOCKET_ERROR)
{
HOSTENT*pHostEnt=gethostbyname(szHostname);
if(pHostEnt!
=NULL){
sprintf(szHostaddress,"%d.%d.%d.%d",
(pHostEnt->h_addr_list[0][0]&0x00ff),
(pHostEnt->h_addr_list[0][1]&0x00ff),
(pHostEnt->h_addr_list[0][2]&0x00ff),
(pHostEnt->h_addr_list[0][3]&0x00ff));
}
}
else
return;
CString%%1(szHostaddress);
4.端对端通信
//#include
//#pragmacomment(lib,"WS2_32.lib")
WSADATAwsd;
SOCKETs;
charbuf[1024];
if(WSAStartup(MAKEWORD(2,2),&wsd)!
=0)
{
return-1;//失败
}
s=socket(AF_INET,SOCK_DGRAM,0);
if(s==INVALID_SOCKET)
{
WSACleanup();
return-1;//创建套接字失败
}
SOCKADDR_INservAddr;
servAddr.sin_family=AF_INET;
servAddr.sin_addr.s_addr=inet_addr(%%1);
servAddr.sin_port=htons(INADDR_ANY);
if(bind(s,(SOCKADDR*)&servAddr,sizeof(SOCKADDR_IN))==SOCKET_ERROR)
{
closesocket(s);
WSACleanup();
return-1;//绑定套接字失败
}
intnServAddrlen=sizeof(servAddr);
ZeroMemory(buf,sizeof(buf));
if(recvfrom(s,buf,sizeof(buf),0,(SOCKADDR*)&servAddr,&nServAddrlen)==SOCKET_ERROR)
{
closesocket(s);
WSACleanup();
return-1;//接收数据失败
}
CString%%2(buf);
ZeroMemory(buf,sizeof(buf));
strcpy(buf,%%3);
SOCKADDR_INclientAddr;
clientAddr.sin_family=AF_INET;
clientAddr.sin_addr.s_addr=inet_addr(%%4);
clientAddr.sin_port=htons((short)%%5);
intnClientlen=sizeof(clientAddr);
if(sendto(s,buf,sizeof(buf),0,(SOCKADDR*)&clientAddr,nClientlen)==SOCKET_ERROR)
{
closesocket(s);
WSACleanup();
return-1;//向服务器发送数据失败
}
closesocket(s);
WSACleanup();
5.点对点通信
//#include
//#pragmacomment(lib,"WS2_32.lib")
WSADATAwsd;
SOCKADDR_INaddrServ,addrServ2;
SOCKETsServer,sClient,sHost;
intretVal;
sockaddr_inaddrClient;
charbuf[1024];
staticUINTport=%%2;
BOOLlistenerRun=TRUE;
UINTListen(LPVOIDpParam)
{
addrServ.sin_family=AF_INET;
addrServ.sin_port=htons((UINT)pParam);
addrServ.sin_addr.s_addr=INADDR_ANY;
retVal=bind(sServer,(LPSOCKADDR)&addrServ,sizeof(SOCKADDR_IN));
if(SOCKET_ERROR==retVal)
{
closesocket(sServer);
WSACleanup();
return-1;//绑定套接字失败
}
retVal=listen(sServer,1);
if(SOCKET_ERROR==retVal)
{
closesocket(sServer);
WSACleanup();
return-1;//开始监听失败
}
intaddrClientlen=sizeof(addrClient);
sClient=accept(sServer,(sockaddrFAR*)&addrClient,&addClientlen);
if(INVALID_SOCKET==sClient)
{
closesocket(sServer);
WSACleanup();
return-1;//接收客户端请求失败
}
while(listenerRun)
{
ZeroMemory(buf,sizeof(buf));
retVal=recv(sClient,buf,sizeof(buf));
if(SOCKET_ERROR==retVal)
{
closesocket(sServer);
closesocket(sClient);
WSACleanup();
return-1;//接收客户端数据失败
}
CString%%4(buf);
}
}
if(WSAStartup(MAKEWORD(2,2),&wsd)!
=0)
{
return-1;//失败
}
sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET==sServer)
{
WSACleanup();
return-1;//创建套接字失败
}
CWinThread*pThread=AfxBeginThread(Listen,&port);
sHost=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET==sHost)
{
WSACleanup();
return-1;//创建套接字失败
}
servAddr2.sin_family=AF_INET;
servAddr2.sin_addr.s_addr=inet_addr(%%1);
servAddr.sin_port=htons((short)%%3);
intnServerAddrlen=sizeof(servAddr2);
retVal=connect(sHost,(LPSOCKADDR)&servAddr2,sizeof(servAddr2));
if(SOCKET_ERROR==retVal)
{
closesocket(sHost);
WSACleanup();
return-1;//连接失败
}
zeroMemory(buf,sizeof(buf));
strcpy(buf,%%5);
retVal=send(sHost,buf,sizeof(buf),0);
if(SOCKET_ERROR==retVal)
{
closesocket(sHost);
WSACleanup();
return-1;//向发送数据失败
}
listenerRun=FALSE;
DWORDdwExitCode;
:
:
GetExitCodeThread(pThread->m_hThread,&dwExitCode);
pThread=null;
closesocket(sServer);
closesocket(sClient);
closesocket(sHost);
WSACleanup();