WinSock UDP通讯实例

下载
#include <WinSock2.h> 
#include 
<stdio.h>
#define PORT 
8888
int main() //server
{
    WSADATA wsaData;
    
int Ret = WSAStartup(MAKEWORD(2,2),&wsaData);
    printf(
"Server!\n");
    
if(Ret != 0)
    
{
        printf(
"无法初始化winsock.\n");
        WSACleanup();
    }

    
else{
        
    
//    printf("初始化winsock成功\n");
    }

    
    
if ( LOBYTE( wsaData.wVersion ) != 2 ||
        HIBYTE( wsaData.wVersion ) 
!= 2 )
    
{
        WSACleanup( );
        
return 1
    }


    SOCKET socket
=::socket(AF_INET,SOCK_DGRAM,IPPROTO_IP);
    sockaddr_in addr;
    addr.sin_addr.S_un.S_addr
=INADDR_ANY;
    addr.sin_family
=AF_INET;
    addr.sin_port
=ntohs(PORT);
    
    
    
    
if(socket==INVALID_SOCKET)
    
{
        printf(
"socket Error!");
    }

    
int rs=    bind(socket,(sockaddr*)&addr,sizeof(addr));
    
    
if (rs!=0)
    
{
        printf(
"bind failed!");
        
return 1;
    }

    
char buf[200]="\0";
    
char temp[200]="\0";
    sockaddr_in addrcl;
    
int len=sizeof(sockaddr);
    
    
while(1){
        
        recvfrom(socket,buf,sizeof(buf),
0,(sockaddr*)&addrcl,&len);//用新建的地址结构保存客户端的信息 
        
        sprintf(temp,
"%s:%s",inet_ntoa(addrcl.sin_addr),buf);
        sendto(socket,temp,strlen(temp)
+1,0,(sockaddr*)&addrcl,sizeof(addr));
        
if(strcmp(buf,"srvexit")==0)
        
{
            
break;
        }

        printf(
"%s",buf);
    }

    closesocket(socket);
    
    WSACleanup();
    printf(
"exit\n");
    
return 0;
}



#include <WinSock2.h>
#include 
<stdio.h>
#define PORT 
8888
int main()
{
    WSADATA wsaData;
    
int Ret = WSAStartup(MAKEWORD(2,2),&wsaData);
    printf(
"Client..!\n");
    
if(Ret != 0)
    
{
        printf(
"无法初始化winsock.\n");
        WSACleanup();
    }

    
else{
        
    
//    printf("初始化winsock成功\n");
    }

    
    SOCKET socketc
=::socket(AF_INET,SOCK_DGRAM,IPPROTO_IP);
    sockaddr_in addr;
    addr.sin_addr.S_un.S_addr
=inet_addr("127.0.0.1");
    addr.sin_family
=AF_INET;
    addr.sin_port
=ntohs(PORT);
    
    
if(socketc==INVALID_SOCKET)
    
{
        printf(
"socket Error!");
    }


    
int len=sizeof(sockaddr);
    

    
while (1)//client
    {
        
char buf[200]="\0";
        
char rbuf[300]="\0";
        printf(
"\n:");
        scanf(
"%s",&buf);
        sendto(socketc,buf,strlen(buf)
+1,0,(SOCKADDR*)&addr,len);//用回原来的地址结构
    
        recvfrom(socketc,rbuf,sizeof(rbuf),
0,(SOCKADDR*)&addr,&len);
        
if(strcmp(rbuf,"exit")==0)
        
{
            
break;
        }

        printf(
"%s",rbuf);
        
    }

    
    closesocket(socketc);
    WSACleanup();
    printf(
"end\n");
    
return 0;
}


原文地址:https://www.cnblogs.com/ahuo/p/890826.html