首页 > 编程知识 正文

tcp客户端socket代码,qtcpserver多客户端

时间:2023-05-03 11:45:27 阅读:25520 作者:4686

1。 当客户端如图所示连接到服务器时,服务器将向客户端发送" hello tcp "

2 .实例代码

------------- -服务器端

修改工程文件. pro、QT =network并添加net模块

构件. h

# ifndef构件_ h # define构件_ h # includeqwidget # includeqtnetworknamespaceui { class构件; }类构件3360 publicqwidget { q _ object public : explicit构件(q构件* parent=0); ~小部件(); 私有: ui :3360构件* ui; qtcpserver*TCP服务器; 公共slots : voidsendmessages (; (; # endif//构件_ h构件. CPP

# include '构件. h ' # include ' ui _构件. h ' # includeqtguiwidget 33603360构件(q构件* parent ) 3360 q构件TCP if (! TCP server-listen (qhostaddress 33603360 localhost,13888 ) )//监听本地主机上的13888端口,如果出现错误,则输出错误消息,并进行qDebug (调试) TTP //连接信号和对应的槽函数connect (TCP服务器,信号) newconnection ()、this,slot (send messages ) ) ); }构件: ~构件() { delete ui; } void构件:3360 send messages () { q字节块; //用于临时保存我们发送的数据qdatastreamout(block,qiodevice :3360只写)。 //使用数据流写入数据的out.set version (q datastream 33603360 Qt _4_7); out(quint16 ) 0; outtr(helloTCP ); out.device(-seek ) ) 0; out(quint16 ) ) block.size )-sizeof (quint 16 ); //已建立连接的子套接字qtcpsocket *客户端连接=TCP服务器- nextpendingconnection (; 客户端连接(connect(clientConnection,signal ) disconnected )、客户端连接,插槽(deletelater ) );/*客户端连接-离散连接fromhost (; 这表示发送完成后将断开连接。 *在这种情况下,发出disconnected (信号)。 *最后调用deleteLater )函数,确保在关闭连接后删除套接字客户端连接。 * /客户端连接-写入(阻止); 客户端连接-离散连接fromhost (; ui-status label-settext (sendmessagesuccessfil ); }

----------------客户端--------------------------------------------- -。

client构件. h

# ifndefclientwidget _ h # defineclientwidget _ h # includeqwidget # includeqtnetwork # includeqtguinamespaceui { clascliention classclient构件3360 publicqwidget { q _ object public : explicitclient构件(q构件* parent=0); ~客户端构件(; 私有slots : voidnewconnect (; //连接到服务器void读取消息(; //接收数据voiddisplayerror (qabstractsocket :3360 socket error ); //错误显示private : ui :3360客户端构件* ui; qtcpsocket*TCP插座; qstring消息; //存储从服务器接收的字符串quint 16块大小的//保存文件的大小信息; # endif//client构件_ hclient构件. CPP

# include ' client构件. h ' # include ' ui _ client构件. h ' # includeqtdebugclientwidget 3360: client构件(q构件连接(TCP套接字,信号(就绪读取),this,插槽(读取消息) ); 连接(TCP套接字,信号(错误) qabstractsocket 33603360套接字错误)、this,slot )显示错误(错误) qabstractsocket /* *数据到来时发出readyRead ) )信号,运行读取数据的readMessage )函数。 *发生错误时,如果出现error ()信号,则执行displayError ) )插槽函数。 */connect(ui-linkbutton,signal ) clicked ()、this、slot (new connect ) ) } client构件:3360到client构件} voidclient构件:3360 new connect () { blockSize=0; TCP套接字-Abort (; //现有TCP套接字-连接(ui-portLineEdit-text ),ui-portLineEdit-text ) ); //连接到主机。 这里从接口获取主机地址和端口号。 (语音构件3360:读取消息() qdatastreamin ) TCP套接字); in.set version (q datastream :3360 Qt _4_ 7; if(blockSize==0)//接收到的数据是否有2字节,即文件大小信息) /则保存在blocksize变量中,如果没有则返回,数据if (TCP socket-bytes availabble ) //如果得不到所有数据,则返回,返回数据if (TCP套接字字节可用) (块大小)返回; in消息; //将接收到的数据存储在变量中的ui-message label-settext (message ) } voidclientwidget 33603360 display error (qabstractsocket :3360 soor }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。