使用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,开放式系统互联) 参考模型中一种[无 ...
随机推荐
- HNU 12886 Cracking the Safe(暴力枚举)
题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=12886&courseid=274 解题报告:输入4个数 ...
- 在c或c+程序里打印调用栈。转
在C/C++程序里打印调用栈信息 我们知道,GDB的backtrace命令可以查看堆栈信息.但很多时候,GDB根本用不上.比如说,在线上环境中可能没有GDB,即使有,也不太可能让我们直接在上面调试.如 ...
- ImageView显示网络图片
package com.example.urlimage; import java.io.InputStream; import java.net.HttpURLConnection; import ...
- MyEclipse 10 集成Maven
第一步:安装Maven,作者安装目录是:D:\Java\apache-maven-3.2.5 第二步:配置本地仓库 maven将每次应用过的项目.文件.jar都会存储到maven的仓库中(默认仓库位置 ...
- 【GoLang】GoLang 官方 对 error 处理的意见
The Go Blog Errors are values 12 January 2015 A common point of discussion among Go programmers, esp ...
- Java中 final static super this instanceof 关键字用法
一.final关键字 final可以修饰变量.方法及类: 1.当定义一个final变量时,jvm会将其分配到常量池中,其所修饰的对象只能赋值一次,对基本类型来说是其值不可变,引用类型(包括作为函数形参 ...
- pycharm 中 pep8 检查开启.
pycharm pep8检查的开启,默认是暗黄色,我这里为了醒目给改成了黄色.
- 十一天 python操作rabbitmq、redis
1.启动rabbimq.mysql 在""运行""里输入services.msc,找到rabbimq.mysql启动即可 2.启动redis 管理员进入cmd, ...
- Selenium2(webdirver)入门之环境搭建(Java版)
一.开发环境: 1.JDK1.6 2.Eclipse:Version: Kepler Service Release 1,下载地址:http://www.eclipse.org/downloads/ ...
- iOS 串行网络请求。。。待研究
nsurlsession 和 nsurlconnection 能实现吗? 手动实现的关键点在哪里? 我这里说的串行网络请求,指的是第一个网络请求不返回数据,第二个网络请求就不能开始. AFNetwor ...