| 发表于:2007-01-18 17:37:032楼 得分:0 |
#include <winsock2.h> #include "windows.h " #pragma comment(lib, "ws2_32 ") struct linksockcli { //sockaddr_in addrfrom; char ip[16]; //ip地址。 unsigned short int port; //远程主机端口 unsigned long int sendsize; //已发送字节数 unsigned long int recvsize; //已接收字节数 unsigned short int tcporudp; //通信方式 }; socket sockclient;// bool iintsock(int verh=2,int verl=2); //加载winsock32 2.2版 int bindsocket(unsigned short int port); //绑定端口 int sendsrv( /*socket sockclient,*/ dword ipaddress,//ip1 char *ipaddress2,//ip2默认 unsigned short int port, //端口 char *buf,//字符串 int len, //长度 int falg=2 //先择ip ); dword winapi recvproc(lpvoid lpparameter); //接收数据 void sockcl() { closesocket(sockclient); wsacleanup(); } int winapi winmain( hinstance hinstance, hinstance hprevinstance, lpstr lpcmdline, int ncmdshow) { if(iintsock()==false) { if(iintsock(1,1)==false) return 0; } int port=5257; while(bindsocket(port)!=1&&port <65535) { port++; } handle hthread=createthread(null,0,recvproc,null,0,null); ::waitformultipleobjects(1,&hthread,true,infinite); ////////////////////////////////////////////////////////////////////////////////////////////////// return 0; } bool iintsock(int verh,int verl) { word wversionrequested; wsadata wsadata; int err; wversionrequested = makeword( verh,verl ); err = wsastartup( wversionrequested, &wsadata ); if ( err != 0 ) { return false; } if ( lobyte( wsadata.wversion ) !=verh ¦ ¦ hibyte( wsadata.wversion ) != verl) { wsacleanup( ); return false; } return true; } int bindsocket(unsigned short int port) { sockclient=socket(af_inet,sock_dgram,0); if(invalid_socket==sockclient) { return -1; } sockaddr_in addrsock; addrsock.sin_family=af_inet; addrsock.sin_port=htons(port); addrsock.sin_addr.s_un.s_addr=htonl(inaddr_any); int retval; retval=bind(sockclient,(sockaddr*)&addrsock,sizeof(sockaddr)); if(socket_error==retval) { closesocket(sockclient); return 0; } return 1; } int sendsrv(/*socket sockclient,*/dword ipaddress,char *ipaddress2,unsigned short int port,char *buf,int len,int falg) { sockaddr_in addrsrv; addrsrv.sin_family=af_inet; if(falg==2) { addrsrv.sin_addr.s_un.s_addr=inet_addr(ipaddress2); } else {addrsrv.sin_addr.s_un.s_addr=htonl(ipaddress); } addrsrv.sin_port=htons(port); return (sendto(sockclient,buf,(int)(len+1),0,(sockaddr*)&addrsrv,sizeof(sockaddr))); } dword winapi recvproc(lpvoid lpparameter) { sockaddr_in addrfrom; int len=sizeof(sockaddr); char recvbuf[1024]; int retval; while(true) { retval=recvfrom(sockclient,recvbuf,1024,0,(sockaddr*)&addrfrom,&len); if(socket_error==retval) break; } return 0; } | | |
|