---->>>TCP编写实战的小项目

TCP套接字:主机(IP+端口) 和 服务器(IP+端口) 进行通讯,需要中间的一个锁套进行  啮合,这个锁套就是套接字的作用。

其中套接字的使用必须运用数数据流配合才可以。

第一种:不用套接字+不用数据流操作

//客户端发送信息

 void client::clientSendMessage ()

 {

     QByteArray data;

     data.append(ui->clientMessagelineEdit->text());

     tcp->write(data);

     ui->messagetextBrowser->insertPlainText (tr("send message: %1 \n").arg (QString(data)));

 }

第二种:使用套接字+使用数据流

void MainWindow::sendMessage()

{

   QByteArray block;//暂时存储我们需要发送的数据

   QDataStream out(&block,QIODevice::WriteOnly);//TCP必须和数据流一起使用

   out.setVersion(QDataStream::Qt_5_7);//设置数据流的版本(服务器和主机版本一定相同)

   out<<(quint16);//强制转化,quint16=unsigned short,向头部添加0为了开辟空间存放文件大小

   out << tr("");

   out.device()->seek();//向头添加数据,类似链表

   out <<(quint16)(block.size()-sizeof(quint16));//文件大小

   //*************利用“套接字”进行服务器和主机的连接和通讯****************//

   QTcpSocket *clientConnection = tcpServer->nextPendingConnection();

   connect(clientConnection,SIGNAL(disconnected()),//断开连接同时删除套接字

                  clientConnection,SLOT(deleteLater()));

   clientConnection->write(block);

   clientConnection->disconnectFromHost();//此函数关闭套接字触发disconnected()函数,接着由上面连接触发deleteLater()删除套接字

   ui->label_3->setText("successful sendmessage");

}

注释:1.校验的TCP(文件大小+文件信息+文件名+文件),通用的TCP(文件)。当写通用的时候应写后者,当自己使用时可以写前者保证数据准确性,但是一定保证接收端程序也应按照这个格式接受。

2.通用的软件没有数据流和套接字,自己写的软件都可以加。有数据流的TCP和没有数据流的TCP不能进行数据的传送!!!

最新文章

  1. awk(1)-简述
  2. [Android] 查看Android中的AlarmManager事件
  3. Codeforces Round #188 (Div. 2) B. Strings of Power 水题
  4. bzoj1057,poj3250
  5. android常见错误-The container &#39;Android Dependencies&#39; references non existing library
  6. [O] SQLite数据库报错:no such column
  7. 设计模式(五):PROTOTYPE原型模式 -- 创建型模式
  8. android sdk manager无法更新
  9. C51编译器扩展的关键词 &amp; C51中断函数的写法
  10. shell-改变分隔符
  11. oracle10g遇到ORA-00257归档程序错误,在释放之前仅限于内部连接
  12. js继承之原型链方式实现
  13. Python 字符串字典内置函数&amp;方法
  14. C# 第十版
  15. HDFS笔记(二)
  16. Celery分布式任务队列快速入门
  17. centos7 启动mysql
  18. Xrdp vnc password failed
  19. WinForm下的TabControl控件
  20. jsp访问java变量

热门文章

  1. 中文自然语言处理工具HanLP源码包的下载使用记录
  2. RedHat7.3创建本地yum源
  3. Kafka使用log.retention.hours改变消息端的消息保存时间
  4. vivado各版本的区别
  5. DLL的晚绑定与早绑定
  6. TextBox限制输入字母、数字、退格键
  7. 纯css3实现文字间歇滚动效果
  8. 黄聪:PHP发送邮件出现Connection: opening to ssl://的解决办法
  9. java 菜单 中文 乱码问题解决方案(使用idea/eclipse) swing MenuItem乱码
  10. uoj#119. 【UR #8】决战圆锥曲线