Cで1つのUDPの送受信プログラムを書きます

10153 ワード

送信プログラムcpp
#include 
#include 
#include 
#include 
using namespace std;

//                 Ws2_32.dll    ,             
#pragma comment(lib,"ws2_32.lib")

struct test {
    string str;
};

struct UdpHeartPack {
    char UDPData[16] ;
};

int main(int argc, char* argv[])
{
    struct UdpHeartPack udpPack;
    static int UDP_PORT = 7001;
    udpPack.UDPData[0] = 'h';
    udpPack.UDPData[1] = 'e';
    udpPack.UDPData[2] = 'l';
    udpPack.UDPData[3] = 'l';
    udpPack.UDPData[4] = 'o';
    udpPack.UDPData[5] = ' ';
    udpPack.UDPData[6] = 'w';
    udpPack.UDPData[7] = 'o';
    udpPack.UDPData[8] = 'r';
    udpPack.UDPData[9] = 'l';
    udpPack.UDPData[10] = 'd';
    udpPack.UDPData[11] = '\0';
    char *pPack = (char *) &udpPack;
    WSADATA wsaData;                                    //  WinSocket       
    SOCKET sockListener;                                //     
    SOCKADDR_IN saUdpServ;                              //                                      
    BOOL fBroadcast = TRUE;                             //  setsockopt(),    
    char sendBuff[800];                                 //          
    int ncount=0;                                       //        
    //***************************       Winsock   *****************************//
    if(WSAStartup(MAKEWORD( 1, 1 ), &wsaData )!=0)     //  WinSocket    
    {
            printf("Can't initiates windows socket!Program stop.
"
);// -1 return -1; } //******************** UDP ******************// sockListener=socket(PF_INET,SOCK_DGRAM,0); // setsockopt // SO_BROADCAST setsockopt ( sockListener,SOL_SOCKET,SO_BROADCAST, (CHAR *)&fBroadcast, sizeof (BOOL) ); // , IP INADDR_BROADCAST, UDP saUdpServ.sin_family = AF_INET; saUdpServ.sin_addr.s_addr = htonl ( INADDR_BROADCAST ); saUdpServ.sin_port = htons (UDP_PORT); // , while(1) // { Sleep(1000); sprintf(sendBuff,"Message %d is: ok",ncount++); // ncount senBuff //********************** sendto *************************// sendto ( sockListener,/*sendBuff*/pPack, lstrlen (sendBuff)/*sizeof(udpPack)*/, 0, (SOCKADDR *) &saUdpServ, sizeof (SOCKADDR_IN)); printf("%s
"
,sendBuff); // } //********************* socket ***************************************// closesocket(sockListener); // socket WSACleanup(); return 0; } const static int BUFFER_LENGTH = 12;

受信側プログラムcpp
#include 
#include
#include 
//                 Ws2_32.dll    ,             
#pragma comment(lib,"ws2_32.lib") 
int main(int argc, char* argv[])
{
    WSADATA wsaData;                                   //  WinSocket       
    SOCKET sockListener;
    SOCKADDR_IN sin,saClient;                          //      ,sin    
                                                                                                        //saClient           
    char cRecvBuff[800];                               //       
    int nSize,nbSize;
    int iAddrLen=sizeof(saClient);
    if(WSAStartup(MAKEWORD( 1, 1 ), &wsaData )!=0)           //  WinSocket    
    {
                    printf("Can't initiates windows socket!Program stop.
"
);// -1 return -1; } sockListener=socket(AF_INET, SOCK_DGRAM,0); sin.sin_family = AF_INET; sin.sin_port = htons(7001); // , sin.sin_addr.s_addr = htonl(INADDR_ANY); if(bind( sockListener, (SOCKADDR FAR *)&sin, sizeof(sin))!=0) { printf("Can't bind socket to local port!Program stop.
"
);// -1 return -1; } while(1) { nSize = sizeof ( SOCKADDR_IN ); if((nbSize=recvfrom (sockListener,cRecvBuff,800,0,(SOCKADDR FAR *) &saClient,&nSize))==SOCKET_ERROR) // { printf("Recive Error"); break; } cRecvBuff[nbSize] = '\0'; // printf("%s
"
,cRecvBuff); // } return 0; }