Window下UDP(socket)接和收数据案例
配置QT的环境变量,这台电脑à属性à高级系统设置à高级à环境变量à系统变量àpathàC:\Qt\Qt5.3.0\5.3\mingw482_32\bin;C:\Qt\Qt5.3.0\Tools\QtCreator\bin
创建一个QT项目:winAndLinuxMyUdpProject项目
改动QT的项目文件,改动winAndLinuxMyUdpProject.pro文件:
注意,这的的:LIBS+=
-lWs2_32 ##标示使用window下的Ws2_32.lib。-l表示要链接后面的库
4.编写头文件:udp.h
#ifndefUDP_H
#defineUDP_H
//明白的告诉C++编译器。这是一个用C语言编译的函数。你就不要把函数名
//转化为C++格式了
//由于C++的编译器位了方法的重载,会改动方法的名称,假设终于的文件时
//C++为后缀的,那么就不须要加上以下一句了
extern"C" //这里是C++的keyword
{
intsocket_send(constchar*IP);
intsocket_recv();
}
#endif//UDP_H
5.编写头文件的实现函数
#include<winsock2.h> //这里是windows下使用socket须要的文件
#include<stdio.h>
#include<string.h>
/*接收ip地址*/
intsocket_send(constchar*IP)
{
//初始化socket
DWORDver;
WSADATAwsaData;
//在调用WSAStatrtup要告诉windows,我用什么版本号的socket
ver=MAKEWORD(1,1);
//windows要求,仅仅要用socket,第一步必须调用这个函数
WSAStartup(ver,&wsaData);
//初始化socket完毕
//建立一个socket,第一个參数是指定socket要用那个协议,AF_INET
//代表要用TCP/IP协议
//第三个參数SOCK_DGRAM意思是要用UDP协议
//第三个參数一般默认值填0
SOCKETst=socket(AF_INET,SOCK_DGRAM,0);//定义一个socket
structsockaddr_inaddr;
memset(&addr,0,sizeof(addr));//初始化结构addr;
addr.sin_family=AF_INET;//代表要使用一个TCP/IP的地址
addr.sin_port=htons(8080);//hosttonetshort
addr.sin_addr.s_addr=inet_addr(IP);
charbuf[1024]={0};
size_trc=0;
while(1)
{
memset(buf,0,sizeof(buf));
gets(buf);
if(buf[0]=='0')//做为还原的退出条件
break;
//发送udp数据
rc=sendto(st,buf,strlen(buf),0,(structsockaddr
*)&addr,sizeof(addr));
}
closesocket(st);//使用完socket要将其关闭
WSACleanup();//释放winsocket内部的相关资源
returnrc;
}
intsocket_recv()
{
//初始化socket
DWORDver;
WSADATAwsaData;
//在调用WSAStatrtup要告诉widnows。我用什么版本号的socket
ver=MAKEWORD(1,1);
//Windows要求,仅仅要用Socket,第一步必须调用这个函数
WSAStartup(ver,&wsaData);
//初始化socket完毕
//建立一个socket,第一个參数是指定socket要用那个协议,AF_INET代表要用TCP/IP协议
//第二个參数SOCK_DGRAM意思是要用UDP协议
//第三个參数一般默认填0
SOCKETst=socket(AF_INET,SOCK_DGRAM,0); //定义一个socket
structsockaddr_inaddr;
memset(&addr,0,sizeof(addr)); //初始化结构addr
addr.sin_family=AF_INET;//代表要使用一个TCP/IP的地址
addr.sin_port=htons(8080);//hosttonetshort
addr.sin_addr.s_addr=htonl(INADDR_ANY);//做为接收方,不须要指定详细的IP地址。接收的主机是什么IP,我就在什么IP上收数据
intrc=0;
//将port号和程序绑定
if(bind(st,(structsockaddr*)&addr,sizeof(addr))>-1)
{
charbuf[1024]={0};
structsockaddr_insendaddr;
memset(&sendaddr,0,sizeof(sendaddr));
intlen=sizeof(sendaddr);
while(1)
{
memset(buf,0,sizeof(buf));
//接收udp数据
rc=recvfrom(st,buf,sizeof(buf),0,
(structsockaddr*)&sendaddr,&len);
printf("%s\n",buf);
}
}
closesocket(st);//使用完socket要将其关闭
WSACleanup(); //释放win_socket内部的相关资源
returnrc;
}
6.编写main.c
#include <iostream>
#include "udp.h"
using namespace std;
int main(int argc, char *args[])
{
//这一句说明当參数的个数大于1的时候发送消息
if (argc > 1)
{
socket_send(args[1]); //
}
else
{
//表示接收消息
socket_recv();
}
return 0;
}
7.执行项目,项目截图例如以下:
A:先打开cmd窗体用于接收,进入项目winAndLinuxMyUdpProject.exe所在位置:
G:\QT\build-winAndLinuxMyUdpProject-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug\
B:打开cmd窗体用于发送:
以下是接收窗体:
以下是发送窗体:
8.额外加入:
A:gcc编译过程:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">
B:对于C语言来讲。编译完毕之后函数的名称不会改变。对于C++来讲。函数的名称发生改变。假设C代码中的函数。在C++中使用一定要用extern “C”keyword来说明。
C:在unix下so文件一定要以lib开头,以so结尾
Window下UDP(socket)接和收数据案例的更多相关文章
- window下Mysql 恢复Delete删除的数据
转载:https://www.cnblogs.com/q149072205/p/11940591.html 本机用的Navicat连mysql测试DB又连了正式DB,因为本地与正式要频繁操作所以都打开 ...
- Linux编程之UDP SOCKET全攻略
这篇文章将对linux下udp socket编程重要知识点进行总结,无论是开发人员应知应会的,还是说udp socket的一些偏僻知识点,本文都会讲到.尽可能做到,读了一篇文章之后,大家对udp so ...
- 【转】Linux编程之UDP SOCKET全攻略
转自:http://www.cnblogs.com/skyfsm/p/6287787.html?utm_source=itdadao&utm_medium=referral 这篇文章将对lin ...
- UDP(socket)数据访问和封装情况C++代码
配置QT下的pro文件 TEMPLATE = app CONFIG += console CONFIG -= app_bundle CONFIG -= qt LIBS += -lWs2_32 ...
- Day28--Python--网络通信协议 tcp与udp下的socket
昨日内容回顾: 1. CS架构 服务端客户端架构 软件CS架构: 京东,淘宝,QQ,微信,暴风影音,快播 硬件CS架构: 打印机 服务端: 提供服务的 客户端: 享受服务的 BS架构: 浏览器和服务端 ...
- day 27 网络通信协议 tup udp 下的socket
1.osi七层模型 通信流程 socket(抽象层): 结合上图来看,socket在哪一层呢,我们继续看下图 socket在内的五层通讯流程: 2.TCP/UDP的区别: TCP是以数据流的形式传输, ...
- c++ 网络编程(一)TCP/UDP windows/linux 下入门级socket通信 客户端与服务端交互代码
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9601511.html c++ 网络编程(一)TCP/UDP 入门级客户端与服务端交互代码 网 ...
- 项目总结22:Java UDP Socket数据的发送和接收
项目总结22:Java UDP Socket数据的发送和接收 1-先上demo 客户端(发送数据) package com.hs.pretest.udp; import java.io.IOExcep ...
- window下安装redis报错: creating server tcp listening socket 127.0.0.1:6379: bind No error
window下安装redis报错: creating server tcp listening socket 127.0.0.1:6379: bind No error 解决: 如果没有配置环境,在安 ...
随机推荐
- BZOJ 1845 Simpson积分
思路: Simpson积分直接上 限制一下递归深度+精度就好了 (难以理解为什么这么多人写扫描线) //By SiriusRen #include <bits/stdc++.h> usi ...
- 元组Tuple、数组Array、映射Map
一.元组Tuple 元组Tuple是不同类型的值的聚集,元组的值将单个的值包含在圆括号中来构成,元组可以包含一个不同类型的元素 如 val riple = (100, "Scala" ...
- 记Spring下autowire为name时的一个现象
当autowire为byname时,假如有一个名为“user”的component,恰巧还有另一个属性为“user”,它的set方法为setUser(User user),Spring会强行把comp ...
- Paint、Canvas
1.Canvas类 public class Canvas { public static final int ALL_SAVE_FLAG = 31; /** @deprecated */ @Depr ...
- mysql中返回当前时间的函数或者常量
引用:http://blog.sina.com.cn/s/blog_6d39dc6f0100m7eo.html 1.1 获得当前日期+时间(date + time)函数:now() 除了 now() ...
- Jupyter(Ipython) Notebook 入门
upyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言. 一般用来编写漂亮的交互式文档. 文学编程的读者不是机器,而是人. 我们 ...
- 查看/进入mac根目录的方式
1.通过“前往文件夹”快捷键组合 (1)打开finder,点击上部菜单栏“前往”,然后“个人”,直接跳转. (2)快捷键组合:command + shift + G:注意:打开finder后,再快捷键 ...
- JSP中如何利用JS实现登录页面的跳转(JSP中如何利用JS实现跳转页面)
<%! <% url = word = } ...
- Cuder - 用C++11封装的CUDA类
以前写cuda:初始化环境,申请显存,初始化显存,launch kernel,拷贝数据,释放显存.一个页面大部分都是这些繁杂但又必须的操作,有时还会忘掉释放部分显存. 今天用C++11封装了这些CUD ...
- springboot配置多数据源(JdbcTemplate方式)
在实际开发中可能会遇到需要配置多个数据源的情况,比如:需要使用多个host.需要使用多种数据库(MySql.Oracle.SqlServer…) 如果使用springboot开发,可做如下配置: Co ...