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

对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()读取或写入单字节。


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

它们的具体联系:

Qt模块化笔记之network——套接字Socket网络编程起步_第1张图片

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

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

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

公有函数:

	QAbstractSocket(SocketType socketType, QObject * parent)
	virtual	~QAbstractSocket()

virtual void	connectToHost(const QString & hostName, quint16 port, OpenMode openMode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol)
virtual void	connectToHost(const QHostAddress & address, quint16 port, OpenMode openMode = ReadWrite)//连接至远程主机,这两个中一般用这个。
bool	bind(const QHostAddress & address, quint16 port = 0, BindMode mode = DefaultForPlatform)
bool	bind(quint16 port = 0, BindMode mode = DefaultForPlatform)

void	setPauseMode(PauseModes pauseMode)
void	setProxy(const QNetworkProxy & networkProxy)//为本socket设置个socket代理,即数据将先发送到代理服务器,再到另一端,保证安全。百度下……
virtual void	setReadBufferSize(qint64 size)
virtual bool	setSocketDescriptor(qintptr socketDescriptor, SocketState socketState = ConnectedState, OpenMode openMode = ReadWrite)
virtual void	setSocketOption(QAbstractSocket::SocketOption option, const QVariant & value)

void	abort()//停止,立即关闭socket连接
virtual void	resume()
bool	flush()
virtual void	disconnectFromHost()//数据传输完成才关闭连接,


SocketError	error() const
SocketState	state() const
bool	isValid() const
QHostAddress	localAddress() const
quint16	localPort() const
QString	peerName() const//远程主机名
quint16	peerPort() const
QHostAddress	peerAddress() const//远程主机地址,IP
PauseModes	pauseMode() const
QNetworkProxy	proxy() const
qint64	readBufferSize() const
virtual qintptr	socketDescriptor() const
virtual QVariant	socketOption(QAbstractSocket::SocketOption option)
SocketType	socketType() const

virtual bool	waitForConnected(int msecs = 30000)
virtual bool	waitForDisconnected(int msecs = 30000)

Reimplemented Public Functions

virtual bool	atEnd() const
virtual qint64	bytesAvailable() const
virtual qint64	bytesToWrite() const
virtual bool	canReadLine() const
virtual void	close()
virtual bool	isSequential() const
virtual bool	waitForBytesWritten(int msecs = 30000)
virtual bool	waitForReadyRead(int msecs = 30000)

Signals

void	connected()//连接上时发出
void	disconnected()
void	error(QAbstractSocket::SocketError socketError)//出错
void	hostFound()
void	proxyAuthenticationRequired(const QNetworkProxy & proxy, QAuthenticator * authenticator)
void	stateChanged(QAbstractSocket::SocketState socketState)//连接状态变化


Protected Functions
void setLocalAddress(const QHostAddress & address)
void setLocalPort(quint16 port)
void setPeerAddress(const QHostAddress & address)
void setPeerName(const QString & name)
void setPeerPort(quint16 port)
void setSocketError(SocketError socketError)
void setSocketState(SocketState state)

Reimplemented Protected Functions
virtual qint64 readData(char * data, qint64 maxSize)
virtual qint64 readLineData(char * data, qint64 maxlen)
virtual qint64 writeData(const char * data, qint64 size)
————————————————————————————————————————————————————————————

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

你可能感兴趣的:(Qt模块化笔记之network)