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++中的调用
    

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

    **运行结果**

    发送方
    接收方

  • 相关阅读:
    [直播]WordLock——英文单词锁
    一些Shell的好东西
    Linux下的词典——GoldenDict
    Android重写onOreate,onPause,onStop等方法时需要注意的问题!
    [记录]我的Android工程——SelectToDo
    [FZYZOI比赛]T1256 20130322 (动态规划) 黄地产的生活
    Android使用DOM来编辑XML时遇到的问题——无法保存
    在Java下使用DOM来读取/修改Xml文件
    没来得及整理的一些网站
    Android的一些函数或关于它们用法的函数
  • 原文地址:https://www.cnblogs.com/jjx2013/p/6223768.html
Copyright © 2011-2022 走看看