zoukankan      html  css  js  c++  java
  • 使用C与C++混合编程封装UDP协议

    1. 引入头文件,导入lib文件
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <WinSock2.h>
    
    #pragma comment(lib,"Ws2_32.lib")
    
     2. 在头文件中声明,由于是C++中调用C代码需要使用extern关键字
    
    

    extern “C” 
    { 
    int socket_send(); 
    int socket_recv(); 
    }

    
    
     3. 发送方的实现
    

    int socket_send() 
    { 
    //初始化socket 
    DWORD ver; 
    WSADATA wsadata; 
    SOCKET st; 
    size_t rc; 
    unsigned long laddr; 
    struct sockaddr_in addr; 
    char buf[1024]={0}; 
    ver=MAKEWORD(1,1); //调用wsaSatup时要告诉windows要使用哪个版本scoket 
    WSAStartup(ver,&wsadata); //只要使用socket,必须调用这个方法,WINDOWS规定 
    //初始化scoket完成

     st=socket(AF_INET,SOCK_DGRAM,0);      //建立一个socket
    //struct sockaddr_in addr;
    memset(&addr,0,sizeof(addr));
    addr.sin_family=AF_INET;
    addr.sin_port=htons(8080);
    addr.sin_addr.s_addr=inet_addr("127.0.0.1");
    

    /* laddr=inet_addr(“192.168.6.200”); 
    printf(“%x ”,laddr);*/ 
    strcpy(buf,”Hello World”); 
    rc=sendto(st,buf,strlen(buf),0,(struct sockaddr *)&addr,sizeof(addr)); 
    printf(“发送方%s ”,buf); 
    closesocket(st); 
    WSACleanup(); 
    return rc; 
    }

    
    4. 接收方的实现
    

    int socket_recv() 
    { 
    //初始化socket 
    DWORD ver; 
    WSADATA wsadata; 
    SOCKET st; 
    size_t rc; 
    unsigned long laddr; 
    struct sockaddr_in addr; 
    char buf[1024]={0}; 
    ver=MAKEWORD(1,1); //调用wsaSatup时要告诉windows要使用哪个版本scoket 
    WSAStartup(ver,&wsadata); //只要使用socket,必须调用这个方法,WINDOWS规定 
    //初始化scoket完成

     st=socket(AF_INET,SOCK_DGRAM,0);      //建立一个socket
    //struct sockaddr_in addr;
    memset(&addr,0,sizeof(addr));
    addr.sin_family=AF_INET;
    addr.sin_port=htons(8080);
    addr.sin_addr.s_addr=htonl(INADDR_ANY);  //作为接收方不需要指定具体的IP地址
    if(bind(st,(struct sockaddr *)&addr,sizeof(addr))>-1)  //将端口号与程序绑定
    {
        struct sockaddr_in send_addr;
        int len;
        memset(&send_addr,0,sizeof(send_addr));
        len=sizeof(send_addr);
        //接收UDP数据
        rc=recvfrom(st,buf,sizeof(buf),0,(struct sockaddr *)&send_addr,&len);
       //rc=sendto(st,buf,strlen(buf),0,(struct sockaddr *)&addr,sizeof(addr));
        printf("接收方%s
    ",buf);
    }
    
    
    
     closesocket(st);
     WSACleanup();
     return rc;
    

    }

    
    5. 最后一步,在C++中的调用
    
    • 1
    • 2
    • 3

    int main(int argc,char *args[]) 
    { 
    int i=0,j=0; 
    if(argc>1) 
    { 
    if(args[1][0]==’1’) 
    { 
    cout<<”发送”<

    • 1

    **运行结果**

    发送方 
    接收方

  • 相关阅读:
    js web简单的路由管理器
    Flutter Android Toast Message(flutter访问Android Toast Message)
    web 常用开发工具
    vim 常用指令
    Bootstrap5 多级dropdown
    nginx proxy
    asm align 对齐数据
    nodejs stream 创建读写流
    asm FPU 寄存器
    Nestjs 上传文件到七牛云
  • 原文地址:https://www.cnblogs.com/jjx2013/p/5186335.html
Copyright © 2011-2022 走看看