使用C与C++混合编程封装UDP协议

时间:2023-03-08 21:52:46
  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\n”,laddr);*/

strcpy(buf,”Hello World”);

rc=sendto(st,buf,strlen(buf),0,(struct sockaddr *)&addr,sizeof(addr));

printf(“发送方%s\n”,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\n",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<<”发送”<

**运行结果**

使用C与C++混合编程封装UDP协议

使用C与C++混合编程封装UDP协议