使用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\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<<”发送”<

**运行结果**

发送方
接收方

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值