使用C与C++混合编程封装UDP协议
- 引入头文件,导入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协议的更多相关文章
- 网络编程(基于udp协议的套接字/socketserver模块/进程简介)
一.基于UDP协议的套接字 TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就 ...
- JAVA基础知识之网络编程——-基于UDP协议的通信例子
UDP是一种不可靠的协议,它在通信两端各建立一个socket,这两个socket不会建立持久的通信连接,只会单方面向对方发送数据,不检查发送结果. java中基于UDP协议的通信使用DatagramS ...
- 网络编程(UDP协议-聊天程序)
网络编程中的UDP协议中聊天程序,发送端口,和接受端口. 发送端口(Send): <span style="font-size:18px;">package cn.it ...
- UNIX网络编程——基于UDP协议的网络程序
一.下图是典型的UDP客户端/服务器通讯过程 下面依照通信流程,我们来实现一个UDP回射客户/服务器: #include <sys/types.h> #include <sys/so ...
- Java学习笔记52(网络编程:UDP协议案例)
InetAddress类: 表示互联网中的IP地址,示例: package demo; import java.net.InetAddress; import java.net.UnknownHost ...
- 网络编程: 基于UDP协议的socket
udp是无链接的,启动服务之后可以直接接受消息,不需要提前建立链接 UDP协议的通信优势: 允许一个服务器同时和多个客户端通信, TCP不行 服务端 import socket sk = socket ...
- java 网络编程基础 UDP协议的Socket:DatagramSocket;广播Socket:MulticastSocket
什么是UDP协议: UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket 但这两个 Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象.Java 提供了 ...
- java 网络编程基础 UDP协议DatagramSocket,MulticastSocket 实现局域网聊天软件(Server + Client模式)
开发思路: 服务端两个Socket: UDP的DatagramSocket接收客户端消息. 广播multicastSocket 发送广播消息 客户端一个Socket: multicastSocke ...
- 网络编程4之UDP协议
一.定义 UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种[无 ...
随机推荐
- 淘宝(阿里百川)手机客户端开发日记第十五篇 JSON解析(四)
解析一个从淘宝传递的JSON (大家如有兴趣可以测试下):{ "tae_item_detail_get_response": { "data": { " ...
- JVM内存监控工具 Jvisualvm
这个工具是官方提供的,直接在JDK工具包下的bin目录找找就可以找到,或者打开cmd直接输入"jvisualvm"即可打开该工具(配置好java环境变量). 需要在catalina ...
- sizeof和小部分c++语法
ios 中 sizeof(类型) 获取类型所占字节 32位操作系统中, 每个字节占8个位 64位操作系统中, 每个字节占16个位 INT_MAX 2147483647 int size1 = siz ...
- [HDU4507]吉哥系列故事——恨7不成妻
[HDU4507]吉哥系列故事--恨7不成妻 试题描述 单身!依然单身!吉哥依然单身!DS级码农吉哥依然单身!所以,他生平最恨情人节,不管是214还是77,他都讨厌!吉哥观察了214和77这两个数,发 ...
- Windows系统使用putty远程连接DigitalOcean创建的Linux系统(CentOS6.7为例)
大部分vps提供网站都会在网站上提供一个控制台界面,方便操作远程vps.但是使用起来特别不方便,尤其在一个神奇的国家,打开国外网站都困难,何况还要在网站上不断的操作.这一教程记录如何在Windows系 ...
- C++基础知识(1)----文件操作
参照 小菜鸟上校 的博客 // file operat.cpp : 定义控制台应用程序的入口点. /*上述例子的主要功能是将一个文件的内容复制到另一个文件中, 这个功能主要由一个函数copy来实现.它 ...
- jQuery调用后台方法
前台: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.as ...
- C语言中#define的用法(转)
转自:http://www.dingge.com/main/article.asp?id=10 今天整理了一些#define的用法,与大家共享! 1.简单的define定义 #define MAXTI ...
- 用基础动画实现iOS控件循环旋转
- (void)viewDidLoad { [super viewDidLoad]; UIButton* ag=[[UIButton alloc]initWithFrame:CGRectMake(sc ...
- diff & pattch 命令
基础知识 该命令的功能为逐行比较两个文本文件,列出其不同之处.它比comm命令完成更复杂的检查.它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序. 语法:diff ...