當前位置:編程學習大全網 - 編程語言 - 關於vc++寫socket,bind出錯

關於vc++寫socket,bind出錯

1.簡單服務器

//#include <winsock2.h>

//#pragma comment(lib,"WS2_32.lib")

WSADATA wsd;

static UINT port=%%1;

UINT Listen(LPVOID pParam)

{

SOCKET sServer,sClient;

char buf[1024];

int retVal;

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_IN addrServ;

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_in addrClient;

int addrClientlen=sizeof(addrClient);

sClient=accept(sServer,(sockaddr FAR*)&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();

return 0;

}

CWinThread *pThread=AfxBeginThread(Listen,&port);

2.簡單客戶端

//#include <winsock2.h>

//#pragma comment(lib,"WS2_32.lib")

WSADATA wsd;

SOCKET sHost;

SOCKADDR_IN servAddr;

char buf[1024];

int retVal;

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);

int nServAddlen=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 <winsock2.h>

//#pragma comment(lib,"WS2_32.lib")

WSADATA wsd;

if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)

{

return -1;//失敗

}

char szHostname[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 <winsock2.h>

//#pragma comment(lib,"WS2_32.lib")

WSADATA wsd;

SOCKET s;

char buf[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_IN servAddr;

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;//綁定套接字失敗

}

int nServAddrlen=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_IN clientAddr;

clientAddr.sin_family=AF_INET;

clientAddr.sin_addr.s_addr=inet_addr(%%4);

clientAddr.sin_port=htons((short)%%5);

int nClientlen=sizeof(clientAddr);

if(sendto(s,buf,sizeof(buf),0,(SOCKADDR*)&clientAddr,nClientlen)==SOCKET_ERROR)

{

closesocket(s);

WSACleanup();

return -1;//向服務器發送數據失敗

}

closesocket(s);

WSACleanup();

5.點對點通信

//#include <winsock2.h>

//#pragma comment(lib,"WS2_32.lib")

WSADATA wsd;

SOCKADDR_IN addrServ,addrServ2;

SOCKET sServer,sClient,sHost;

int retVal;

sockaddr_in addrClient;

char buf[1024];

static UINT port=%%2;

BOOL listenerRun=TRUE;

UINT Listen(LPVOID pParam)

{

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;//開始監聽失敗

}

int addrClientlen=sizeof(addrClient);

sClient=accept(sServer,(sockaddr FAR*)&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);

int nServerAddrlen=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;

DWORD dwExitCode;

::GetExitCodeThread(pThread->m_hThread,&dwExitCode);

pThread=null;

closesocket(sServer);

closesocket(sClient);

closesocket(sHost);

WSACleanup();

  • 上一篇:GIS發送文件
  • 下一篇:留學申請哈佛大學哪個專業好
  • copyright 2024編程學習大全網