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 解决: 如果没有配置环境,在安 ...
随机推荐
- 关于网页的自适应问题一---Media Query(媒介查询)
1.Media Query(媒介查询) 通过不同的媒介类型和条件定义样式表规则.媒介查询让CSS可以更精确作用于不同的媒介类型和同一媒介的不同条件.媒介查询的大部分媒介特性都接受min和max用于表达 ...
- SAS进阶《深入解析SAS》之Base SAS基础、读取外部数据到SAS数据集
SAS进阶<深入解析SAS>之Base SAS基础.读取外部数据到SAS数据集 前言:在学习完<SAS编程与商业案例>后,虽然能够接手公司的基本工作,但是为了更深入的SAS学习 ...
- iOS 中可用的受信任根证书列表
iOS 中可用的受信任根证书列表 iOS 受信任证书存储区中包含随 iOS 一并预装的受信任根证书. 关于信任和证书 以下所列的各个 iOS 受信任证书存储区均包含三类证书: “可信”的证书用于建立信 ...
- 关于 实体类中 时间字段 为string 类型和 datatime类型 比较
经发现, 数据库中保存时间格式数据 可以正常 排序, 数据中保存时间格式字符串 排序出现问题 /// <summary> /// 修改时间 /// </summary> pu ...
- 解决hibernate删除时的异常 deleted object would be re-saved by cascade (remove deleted object from associa
今天在做项目时,需要删除一个对象,由于关联关系是一对多和多对一的关系,于是在代码中需要删除多的一方的对象时出现了 deleted object would be re-saved by cascade ...
- Python编码格式导致的csv读取错误
Python编码格式导致的csv读取错误(pandas.read_csv) 本文记录python小白我今天遇到的这两个问题(csv.reader和pandas.csv_read): pandas模块“ ...
- C 利用strtok, feof 截取字符串
#cat /tmp/fff 10:hugetlb:/hello/06b11c9967cc0e106f5f4673246f671aa7388f623f58b250d9d9cb0f8c0f2b18 9:d ...
- BFS入门篇——RQNOJ195&&335
PID195 / 校园迷宫☆ 从x,y走到去q,w的最小步数,限制是有的点可走,有的点不可走,BFS嘛. #include<bits/stdc++.h> using namespace s ...
- Python - 模块(一)
目录 Python - 模块(一) 模块的引用方式 常用模块 random(随机模块) os模块 sys 序列化模块 hashlib subprocess optparse struct Python ...
- 腾讯云,搭建nginx静态网站服务器
搭建Http静态服务器环境 任务时间:15min ~ 30min 搭建静态网站,首先需要部署环境.下面的步骤,将告诉大家如何在服务器上通过 Nginx 部署 HTTP 静态服务. 安装 Nginx 在 ...