QT接收Linux内核,QT界面程序经过网路与普通的linux应用程序进行数据传送的情况...

有时候会遇到QT界面程序经过网路与普通的linux应用程序进行数据传送的情况:(UDP协议,非TCP协议)

个人感觉比管道、共享内存、信号量、消息队列好用

Qt udp_client

1.我们新建Qt4 GuiApplication,工程名为“udpSender”,选中QtNetwork模块,Base class选择QWidget。

2.我们在widget.ui文件中,往界面上添加一个Push Button,进入其单击事件槽函数。

3.我们在widget.h文件中更改。

添加头文件:#include

添加private私有对象:QUdpSocket *sender;

4.我们在widget.cpp中进行更改。

在构造函数中添加:sender = new QUdpSocket(this);

void Widget::on_pushButton_clicked() {

QByteArray datagram = “hello world!”;

sender->writeDatagram(datagram.data(),datagram.size(),

QHostAddress("192.168.1.10"),8888); //ip为目标机ip

}

这里我们定义了一个QByteArray类型的数据报datagram,其内容为“hello world!”。然后我们使用QUdpSocket类的writeDatagram()函数来发送数据报,这个函数有四个参数,分别是数据报的内容,数据报的大小,主机地址和端口号。对于数据报的大小,它根据平台的不同而不同,但是这里建议不要超过512字节。对于端口号,它是可以随意指定的,但是一般1024以下的端口号通常属于保留端口号,所以我们最好使用大于1024的端口,最大为65535。我们这里使用了8888这个端口号,一定要注意,在下面要讲的服务器程序中,也要使用相同的端口号。

应用程序:udp_server.c

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define SERVER_PORT 8888

#define MAX_MSG_SIZE 1024

void udps_respon(int sockfd)

{

struct sockaddr_in addr;

int addrlen,n;

char msg[MAX_MSG_SIZE];

while(1)

{  /* 从网络上读,并写到网络上 */

bzero(msg,sizeof(msg)); // 初始化,清零

addrlen = sizeof(struct sockaddr);

n=recvfrom(sockfd,msg,MAX_MSG_SIZE,0,(struct sockaddr*)&addr,&addrlen); // 从客户端接收消息

msg[n]=0;//将收到的字符串尾端添加上字符串结束标志

/* 显示服务端已经收到了信息 */

fprintf(stdout,"Server have received %s",msg); // 显示消息

}

}

int main(void)

{

int sockfd;

struct sockaddr_in addr;

/* 服务器端开始建立socket描述符 */

sockfd=socket(AF_INET,SOCK_DGRAM,0);

if(sockfd<0)

{

fprintf(stderr,"Socket Error:%s\n",strerror(errno));

exit(1);

}

/* 服务器端填充 sockaddr结构 */

bzero(&addr,sizeof(struct sockaddr_in));

addr.sin_family=AF_INET;

addr.sin_addr.s_addr=htonl(INADDR_ANY);

addr.sin_port=htons(SERVER_PORT);

/* 捆绑sockfd描述符 */

if(bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr_in))<0)

{

fprintf(stderr,"Bind Error:%s\n",strerror(errno));

exit(1);

}

udps_respon(sockfd); // 进行读写操作

close(sockfd);

 }0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值