Qt模块化笔记之network——套接字Socket网络编程起步

来源:互联网 发布:sql数据库打不开怎么办 编辑:程序博客网 时间:2024/05/16 07:34

对Qt的套接字三说,有三大主角:QTcpSocketQUdpSocket和QTcpServer。


套接字用来控制网络传输数据,可以将它比作电话机。参考百度百科的socket解释点击打开链接

TCP(Transmission Control Protocol,传输控制协议),是一种面向连接(连接导向)的、可靠的、基于字节流的传输层,在正式收发数据前,必须和对方建立可靠的连接。

UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去! 

简单说,要准确完整地传输数据(如传输一个文件),使用QTcpSocket,只需要往外发送数据,而不管接收方是否收到数据,使用QUdpSocket。——————————————————————————————————————————————————————————————————

如何使用用socket:

QTcpSocketQUdpSocket都继承自QAbstractSocket,而它又继承自QIODevice故套接字的使用方式,像IO设备操作文件一样,具有一定相似性。

网络的"另一端"的socket可以看作一个IO设备,本地的socket可以通过网线向这个设备写入或读取数据,同样,反回来也可以。

可使用socket的 read(), write(), readLine()和readAll()从“另一端”获取或写入数据,也可以用getChar(), putChar(), and ungetChar()读取或写入单字节。


——————————————————————————————————————————————————————————————————

它们的具体联系:


——————————————————————————————————————————————————————————————————

继承自QAbstractSocket的QTcpSocket,没有新增什么函数或信号

以下查看QAbstractSocket,函数很多,可先粗略浏览下。

公有函数:

QAbstractSocket(SocketType socketType, QObject * parent)virtual~QAbstractSocket()virtual voidconnectToHost(const QString & hostName, quint16 port, OpenMode openMode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol)virtual voidconnectToHost(const QHostAddress & address, quint16 port, OpenMode openMode = ReadWrite)//连接至远程主机,这两个中一般用这个。boolbind(const QHostAddress & address, quint16 port = 0, BindMode mode = DefaultForPlatform)boolbind(quint16 port = 0, BindMode mode = DefaultForPlatform)voidsetPauseMode(PauseModes pauseMode)voidsetProxy(const QNetworkProxy & networkProxy)//为本socket设置个socket代理,即数据将先发送到代理服务器,再到另一端,保证安全。百度下……virtual voidsetReadBufferSize(qint64 size)virtual boolsetSocketDescriptor(qintptr socketDescriptor, SocketState socketState = ConnectedState, OpenMode openMode = ReadWrite)virtual voidsetSocketOption(QAbstractSocket::SocketOption option, const QVariant & value)voidabort()//停止,立即关闭socket连接virtual voidresume()boolflush()virtual voiddisconnectFromHost()//数据传输完成才关闭连接,SocketErrorerror() constSocketStatestate() constboolisValid() constQHostAddresslocalAddress() constquint16localPort() constQStringpeerName() const//远程主机名quint16peerPort() constQHostAddresspeerAddress() const//远程主机地址,IPPauseModespauseMode() constQNetworkProxyproxy() constqint64readBufferSize() constvirtual qintptrsocketDescriptor() constvirtual QVariantsocketOption(QAbstractSocket::SocketOption option)SocketTypesocketType() constvirtual boolwaitForConnected(int msecs = 30000)virtual boolwaitForDisconnected(int msecs = 30000)

Reimplemented Public Functions

virtual boolatEnd() constvirtual qint64bytesAvailable() constvirtual qint64bytesToWrite() constvirtual boolcanReadLine() constvirtual voidclose()virtual boolisSequential() constvirtual boolwaitForBytesWritten(int msecs = 30000)virtual boolwaitForReadyRead(int msecs = 30000)

Signals

voidconnected()//连接上时发出voiddisconnected()voiderror(QAbstractSocket::SocketError socketError)//出错voidhostFound()voidproxyAuthenticationRequired(const QNetworkProxy & proxy, QAuthenticator * authenticator)voidstateChanged(QAbstractSocket::SocketState socketState)//连接状态变化


Protected Functions
voidsetLocalAddress(const QHostAddress & address)voidsetLocalPort(quint16 port)voidsetPeerAddress(const QHostAddress & address)voidsetPeerName(const QString & name)voidsetPeerPort(quint16 port)voidsetSocketError(SocketError socketError)voidsetSocketState(SocketState state)
Reimplemented Protected Functions
virtual qint64readData(char * data, qint64 maxSize)virtual qint64readLineData(char * data, qint64 maxlen)virtual qint64writeData(const char * data, qint64 size)
————————————————————————————————————————————————————————————

这么多函数,真是吓死人了。

0 0
原创粉丝点击