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协议的更多相关文章

  1. 网络编程(基于udp协议的套接字/socketserver模块/进程简介)

    一.基于UDP协议的套接字 TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就 ...

  2. JAVA基础知识之网络编程——-基于UDP协议的通信例子

    UDP是一种不可靠的协议,它在通信两端各建立一个socket,这两个socket不会建立持久的通信连接,只会单方面向对方发送数据,不检查发送结果. java中基于UDP协议的通信使用DatagramS ...

  3. 网络编程(UDP协议-聊天程序)

    网络编程中的UDP协议中聊天程序,发送端口,和接受端口. 发送端口(Send): <span style="font-size:18px;">package cn.it ...

  4. UNIX网络编程——基于UDP协议的网络程序

    一.下图是典型的UDP客户端/服务器通讯过程 下面依照通信流程,我们来实现一个UDP回射客户/服务器: #include <sys/types.h> #include <sys/so ...

  5. Java学习笔记52(网络编程:UDP协议案例)

    InetAddress类: 表示互联网中的IP地址,示例: package demo; import java.net.InetAddress; import java.net.UnknownHost ...

  6. 网络编程: 基于UDP协议的socket

    udp是无链接的,启动服务之后可以直接接受消息,不需要提前建立链接 UDP协议的通信优势: 允许一个服务器同时和多个客户端通信, TCP不行 服务端 import socket sk = socket ...

  7. java 网络编程基础 UDP协议的Socket:DatagramSocket;广播Socket:MulticastSocket

    什么是UDP协议: UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket 但这两个 Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象.Java 提供了 ...

  8. java 网络编程基础 UDP协议DatagramSocket,MulticastSocket 实现局域网聊天软件(Server + Client模式)

      开发思路: 服务端两个Socket: UDP的DatagramSocket接收客户端消息. 广播multicastSocket 发送广播消息 客户端一个Socket: multicastSocke ...

  9. 网络编程4之UDP协议

    一.定义 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种[无 ...

随机推荐

  1. 联不上网 Unable to initialize Windows Sockets interface. General failure.

    电脑莫名联不上网 Unable to initialize Windows Sockets interface. General failure. Unable to initialize the W ...

  2. Android SDK Manager 无法下载更新,或者更新速度超慢,或者待安装包列表不显示

    解决方法: 转自 http://www.cnblogs.com/tc310/archive/2012/12/21/2828450.html http://jingyan.baidu.com/artic ...

  3. cocos2dx中CC_CALLBACK_1等宏中this指针实际指向

    首先看代码,我在Helloworld中添加两个函数. void HelloWorld::addTarget(){ Size visibleSize = Director::getInstance()- ...

  4. DP~青蛙过河(hrbust1186)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAxoAAAKlCAYAAABMq5pGAAAgAElEQVR4nOzdf4xl53nY9/mrQP8r+k

  5. leetcode 32. Longest Valid Parentheses

    Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...

  6. Python连接MySQL的准备工作

    首先要安装MySQL,64位的win7可以安装64或者32位的MySQL版本,安装之后,python需要一个工具才能连接MySQL,这个工具叫MySQL-python,去这里或者这里下载1.2.3版本 ...

  7. 【leetcode】Validate Binary Search Tree

    Validate Binary Search Tree Given a binary tree, determine if it is a valid binary search tree (BST) ...

  8. pip 安装命令

    pip官网文档 https://pip.pypa.io/en/latest/reference/pip.html 若没有将c:\Python27\Scripts加入到path环境变量,可以在c:\Py ...

  9. (转载)让XCode运行时自动更新资源

    转自http://goldlion.blog.51cto.com/4127613/1351616 用过XCode的人都知道,XCode有一个臭名昭著的bug——除非你修改了源代码造成了重新编译,否则游 ...

  10. redis 中文字符显示

    2015年5月20日 09:57:01 星期三 方法一: redis-cli -h --raw 方法二: linux 终端: echo -e "\xe7\xa5\x9e\xe6\xa3\x8 ...