socket编程代码例子

来源:互联网 发布:梦蝶云购源码 编辑:程序博客网 时间:2024/05/01 09:45

获得本机IP//#include <winsock2.h>//#pragma comment(lib,"WS2_32.lib")/*if(WSAStartup(MAKEWORD(2,2),&wsd)!=0){return -1;//失败}*///#pragma comment(lib,"WS2_32.lib")char szHostname[100],szHostaddress[200];if(gethostname(szHostname,info(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 ));}}elsereturn;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;//绑定套接字失败}SOCKADDR_IN clientAddr;int nClientlen=sizeof(clientAddr);ZeroMemory(buf,sizeof(buf));if(recvfrom(s,buf,size(buf),0,(SOCKADDR*)&clientAddr,nClientlen)==SOCKET_ERROR){closesocket(s);WSACleanup();return -1;//接收数据失败}CString %%2(buf);ZeroMemory(buf,sizeof(buf));strcpy(buf,%%3);servAddr.sin_family=AF_INET;servAddr.sin_addr.s_addr=inet_addr(%%4);servAddr.sin_port=htons((short)%%5);int nServAddrlen=size(servAddr);if(sendto(s,buf,sizeof(buf),0,(SOCKADDR*)&servAddr,nServAddrlen)==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();