QT中的SOCKET编程

QT socket网络编程 QT socket 阅读详情
转自:http://mylovejsj.blog.163.com/blog/static/38673975200892010842865/

QT中的SOCKET编程
2008-10-07 23:13
http://hi.baidu.com/landuochong/blog/item/08268100cf5b6783e950cda9.html

操作系统:ARM-LINUX
QT版本:QT-2.3.2-FOR-LINUX
GUI:Qtopia

在LINUX 下进行网络编程,我们可以使用LINUX提供的统一的套接字接口。但是这种方法牵涉到太多的结构体,比如IP地址,端口转换等,不熟练的人往往容易犯这样 那样的错误。QT中提供的SOCKET完全使用了类的封装机制,使用户不需要接触底层的各种结构体操作。而且它采用QT本身的signal-slot机 制,使编写的程序更容易理解。

QT中共提供四个与套按字相关的类,分别是:

QServerSocket:TCP-based server
QSocket:              Buffered TCP connection
QSocketDevice: Platform-independent low-level socket API
QSocketNotifier: Support for socket callbacks

下面介绍使用QT进行网络编程,我们使用一个简单的C/S模式网络程序说明如何使用QT中的套接字。同时我们用TCP和UDP两种协议实现这个程序(该程序客户端与服务端各向对方发送一个字符口串“abc”)

1、UDP实现
      UDP是不连接协议,没有客户端与服务端的概念。
     1)建立套接字相关对象
           QSocketDevice *MUReceiveSocket;   //套接字对象
            QSocketNotifier *MSocketNotifier;     //套接字监听对象
     2)初始化套接字相关对象
           MUReceiveSocket=new QSocketDevice(QSocketDevice::Datagram);  
           //UDP初始化
           QHostAddress MyAddress;
           QString FakeAddress;

           FakeAddress = get_eth1_ip(); //取得接口IP
           MyAddress.setAddress(FakeAddress);
           MUReceiveSocket->bind(MyAddress,Port);   
          //绑定到指定网络接口地址(IP),指定逻辑端口

           MSocketNotifier = new QSocketNotifier(MUReceiveSocket->socket(),QSocketNotifier::Read,0,"MSocketNotifier");
           //监听MUReceiveSocket套接字
     3)定义用实现响应slot
           virtual void OnMReceive();
           void Client::OnMReceive()
            {
                int ByteCount,ReadCount;
                 char *IncommingChar;

                 fprintf(stderr,"Load a piece of Message!\n");

                ByteCount=MUReceiveSocket->bytesAvailable();
                IncommingChar=(char *)malloc(ByteCount+1);
                 ReadCount=MUReceiveSocket->readBlock(IncommingChar,ByteCount);
                IncommingChar[ByteCount]='\0';

                fprintf(stderr,“%s“,IncommingChar); //打印接收的字符串
           }
     4)关联套接字的signal和接收slot
           connect(MSocketNotifier,SIGNAL(activated(int)),this,SLOT(OnMReceive()));
           //当MSocketNotifier检测到MUReceiveSocket活跃时调用OnMReceive
     5)发送字符串
           char information[20];
            strcpy(information,“abc“);
           MUReceiveSocket->writeBlock(information,length,MyAddress,2201);
2、TCP实现
       TCP的实现与UDP的实现大同小异,它是面象连接的协议。这里只介绍与UDP不同的地方。
      服务端:
      1)套接字对象的定义
            比UDP多定义一个套接字,一个用来监听端口,一个用来通信。
            QSocketDevice *ServerSocket;
            QSocketDevice *ClientSocket;
            QSocketNotifier *ClientNotifier;
            QSocketNotifier *ServerNotifier;
       2)套接字的初始化

            QHostAddress MyAddress;
            QString FakeAddress;

            FakeAddress = "127.0.0.1";
            MyAddress.setAddress(FakeAddress);
            UINT Port=1234;
            ServerSocket=new QSocketDevice(QSocketDevice::Stream);
            ClientSocket=new QSocketDevice(QSocketDevice::Stream);
            ServerSocket->bind(MyAddress,Port);
            ServerSocket->listen(20); //20代表所允许的最大连接数

            ClienttNotifier = new QSocketNotifier(ClientSocket->socket(),QSocketNotifier::Read,0,"ClientSocket");
            ServerNotifier = new QSocketNotifier(ServerSocket->socket(),QSocketNotifier::Read,0,"ServerSocket");
      3)响应连接(在定义slot中响应)
           当收到客户端的连接后,响应它,并以ClientSocket接收:
            ServerSocket->SetSocket(ClientSocket->socket());
       4)接收信息slot与UDP一致,这里不在叙述。
      客户端实现:
       客户端的实现与UDP实现大同小异,不同的地方只是客户端套接字不需要bind端口,因为连接上服 务端后TCP会保持这个连接,直到通信的结束。


QT Socket编程过程问题 客户端: [WARNING T10868] 8-9 10:25:35 91 QObject: Cannot create children for a parent that is in a different thread. (Parent is QTcpSocket(0x23f72c42a40), parent's thread is IpuCommIpu(0x88bd9bfb78), c 阅读详情

相关推荐

Qt中使用Socket进行网络编程

Qt中使用Socket进行网络编程

qq_46017342的博客 3459

QT--QSocketNotifier类介绍

QSocketNotifier 用来监听系统文件操作,将操作转换为Qt事件进入系统的消息循环队列。并调用预先设置的事件接受函数,处理事件。 一共存在3类事件:read,write,exception.       QSocketNotifier::Read 0 There is data to be read. QSocketNotifier::Wr

1万+

QT基于TCPSocket编程

1、在工程文件中加入QT += network 2、服务器除了使用到了QTcpSocket类,还需要用到QTcpSever类 (1)创建QTcpSever对象 [cpp] view plain copy tcpServer = new QTcpServer(this);   (2)监听端口 [cpp

Frank Kong的博客 6939

QTsocket网络编程

简单全面的QTsocket网络编程讲解

weixin_47844533的博客 5591

QT使用QSocketNotifier监听socket事件

QSocketNotifier使用介绍,QSocketNotifier监听tcpsocket接收数据,QSocketNotifier监听netlink套接字,监控USB热插拔测试

weixin_40355471的博客 3349

Qt Socket网络编程

网络编程在现在互联网时代是非常重要的,所以这篇博客将带你了解QT语言是如何使用Socket进行TCP和UPD通讯的! 超详细,一看就会!不会私信找我!

cpp_learner的博客 6109

QtSocket编程实例

QtSocket编程实例 本文章所讲述的内容是关于QtSocket编程,对于socket,大家并不陌生,应用程序调用socket函数来创建一个能够进行网络通信的套接字。 SOCKET socket( int af, int type, int protocol ); 应用程序调用socket函数来创建一个能够进行网络通信的套接字。第一个

wjs1033的专栏 8491

QtSocket网络编程

按钮是对立的,仅仅只能有一个可以选中,然后就是状态栏控件QLable的介绍,这好像是默认显示在左下角的一个控件,通用是通过信号槽的是否连接动态来显示图片。与C++实现的socket编程不同,这里没有用到while循环,这里使用的是一个槽函数来代替的循环,当接收到客户端的连接后(在这里主要是对客户端连接和未连接的按钮能否选中进行了判断,总之就是。

sad_liu的博客 1014

QT中使用socket编程:解决connect函数名称冲突

很简单,在connect前面加上::双冒号即可。

薛钦亮的博客 3428

QT socket 编程

要注意在pro文件中加入QT  += network

a343981218的专栏 519

Qt中采用多线程实现Socket编程

Qt中采用多线程实现Socket编程 Socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 本文介绍的是Qt中采用多线程Socket编程,由于工作的需要,开始接触Qtsocket编程Qt里的example是个不错的教程,但是当我把代码移植到多线程的环境时就出问题了: QObject: Cannot create children for a par...

《好好先生》专栏 6211

QT 的UDP SOCKET编程

QT的UDPSOCKET编程 (2007-08-16 19:10:44) 转载 标签: 文学/原创 QT...

weixin_34143774的博客 177

qtsocket编程

1 文章概括 在qt中借助designer设计通信界面,然后使用QTcpServer,QTcpSocket编写服务器和客户端的程序。 首先建立两个工程,一个是客户端client,另一个是服务器端server。 2 首先建立server项目 使用网络编程要在pro文件下添加network,然后项目qmake,不执行可能会找不到socket头文件 然后是设计界面如下 头文件代码 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #inclu

qq_41902325的博客 1万+

QT Socket编程 多线程服务器

QT Socket编程 多线程服务器 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库提供了一个基于QT框架的Socket编程示例,重点展示了如何实现一个多线程服务器。通过这个示例,您可以学习到如何在QT中使用Socket进行网络通信,并且了解如何通过多线程技术来处理多个客户端的并发连接。 功能特点 多线程支持:服务器能够同时处理多个客户端连接,每个连接都在独立的线...

gitblog_09759的博客 527
上一篇: 三十分钟掌握STL
下一篇: linux 下基于jrtplib库的实时传送实现
eten
博客等级 码龄16年 483粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值