找回密码
 立即注册
收起左侧
楼主: yafeilinux

第37篇 网络(七)TCP(一)

80
回复
35118
查看
  [复制链接]
累计签到:743 天
连续签到:13 天
2014-5-13 22:57:50 显示全部楼层
wang2945 发表于 2014-5-5 22:27
想请问一下 tcp 客户端接收显示  我用了其它服务端的软件进行发送,客户端只能够触发connect但是无法得到数 ...

需要知道服务器端发过来的数据流格式。
回复 支持 反对

使用道具 举报

累计签到:743 天
连续签到:13 天
2014-5-13 22:58:49 显示全部楼层
暗黑圣堂 发表于 2014-5-13 21:41
在构造函数里使用listen函数程序不会阻塞在那里吗?还有就是我想请问实现不同机器之间的通信,HostAdress怎 ...

不会阻塞,这个没有在IU线程中。局域网里面直接使用IP地址即可。
回复 支持 反对

使用道具 举报

累计签到:743 天
连续签到:13 天
2014-5-13 22:59:21 显示全部楼层
Qt新手 发表于 2014-5-4 21:38
请问 怎么在客户端给服务器端发送数据呢?

接着往后看吧,这个问题自己应该可以解决。
回复 支持 反对

使用道具 举报

累计签到:2 天
连续签到:1 天
2014-5-14 09:43:15 显示全部楼层
yafeilinux 发表于 2014-5-13 22:58
不会阻塞,这个没有在IU线程中。局域网里面直接使用IP地址即可。

那主机程序中的HostAddress如果不想配置成Any要怎么配置?
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2014-5-15 22:57:21 显示全部楼层
楼主辛苦了。谢谢分享。
回复 支持 反对

使用道具 举报

累计签到:743 天
连续签到:13 天
2014-5-20 22:38:05 显示全部楼层
暗黑圣堂 发表于 2014-5-14 09:43
那主机程序中的HostAddress如果不想配置成Any要怎么配置?

要实现什么功能?
回复 支持 反对

使用道具 举报

尚未签到

2014-7-11 11:51:24 显示全部楼层
  1. if(blockSize==0) //如果是刚开始接收数据

  2.     {

  3.        //判断接收的数据是否有两字节,也就是文件的大小信息

  4.        //如果有则保存到blockSize变量中,没有则返回,继续接收数据

  5.        if(tcpSocket->bytesAvailable() < (int)sizeof(quint16)) return;

  6.        in >> blockSize;

  7.     }
复制代码
这段我不太明白,Server 端是一次性Write 数据到 socket, Client 端开始接收数据时,先判断大小是否为0,若为0 ,为什么还去判断读到的字节数?
回复 支持 反对

使用道具 举报

累计签到:743 天
连续签到:13 天
2014-7-11 14:02:34 显示全部楼层
wcl19870102 发表于 2014-7-11 11:51
这段我不太明白,Server 端是一次性Write 数据到 socket, Client 端开始接收数据时,先判断大小是否为0,若 ...

这个操作是要读取数据的前两个字节。

因为在数据的前两个字节保存的是整个数据的大小信息,这里先提取了这个大小信息。
回复 支持 反对

使用道具 举报

尚未签到

2014-7-14 13:43:04 显示全部楼层
yafeilinux 发表于 2014-7-11 14:02
这个操作是要读取数据的前两个字节。

因为在数据的前两个字节保存的是整个数据的大小信息,这里先提取了 ...

blocksize == 0 表示当前没有收到数据,是否意味着Client 端还未收到任何数据?那么此时读取socket 中的前2个字节信息不是都为空吗?
回复 支持 反对

使用道具 举报

累计签到:743 天
连续签到:13 天
2014-7-16 22:11:20 显示全部楼层
wcl19870102 发表于 2014-7-14 13:43
blocksize == 0 表示当前没有收到数据,是否意味着Client 端还未收到任何数据?那么此时读取socket 中的 ...

下面不是还有一个判断吗:

  if(tcpSocket->bytesAvailable() < (int)sizeof(quint16)) return;
回复 支持 反对

使用道具 举报

累计签到:18 天
连续签到:1 天
2014-9-25 21:42:20 显示全部楼层
亚飞老师!
   我是按帖子一步步做出来的, 检查过没有错误。
   为什么连接不上呢?
   在客户端程序上出现"Connection refused" 错误提示。
   C:\Users\shaofengli\Desktop
回复 支持 反对

使用道具 举报

累计签到:743 天
连续签到:13 天
2014-9-25 23:02:05 显示全部楼层
拖布鞋 发表于 2014-9-25 21:42
亚飞老师!
   我是按帖子一步步做出来的, 检查过没有错误。
   为什么连接不上呢?

你下载源码试试。
回复 支持 反对

使用道具 举报

累计签到:18 天
连续签到:1 天
2014-9-26 10:50:07 显示全部楼层
yafeilinux 发表于 2014-9-25 23:02
你下载源码试试。

谢谢亚飞老师,
下载源码后问题解决了。
最后根据源码去检查才发现竟然还是自己代码写错了。漏掉了服务器监视主机,6666端口的那个程序。
哎,, 说来惭愧,检查了几遍都没有检查出来。
另外我还有两个问题:
1:您这有没有关于调试的教程,知道调试的话,这个问题估计自己都没发现。
2:为什么tcp连接的时候这么慢,要等好几秒才能收到信息。这还是本机连接没通过网络呢!
回复 支持 反对

使用道具 举报

累计签到:743 天
连续签到:13 天
2014-9-27 21:10:39 显示全部楼层
拖布鞋 发表于 2014-9-26 10:50
谢谢亚飞老师,
下载源码后问题解决了。
最后根据源码去检查才发现竟然还是自己代码写错了。漏掉了服务器 ...

调试可以使用debug()进行,根据大概的出错位置来输出信息,然后判断并找出具体问题。调试完全需要自己的经验,这个需要积累的,看教程帮助不大,因为要具体问题具体分析。

连接慢,这个不会吧,当时没有感觉到啊。
回复 支持 反对

使用道具 举报

累计签到:596 天
连续签到:1 天
2014-11-25 18:44:07 显示全部楼层

      按帖子一步步来的,同一台电脑上的客户端与服务器端已经可以连接,但放在两台电脑上连接失败,出现"Connection refused"。

      win7客户端,winxp服务器端, 两电脑已连接同一个路由器,防火墙和360均关掉了,且互相可以ping通,但连接不上。请问哪里还可能出现问题?
回复 支持 反对

使用道具 举报

累计签到:743 天
连续签到:13 天
2014-12-4 11:58:22 显示全部楼层
shasidaran 发表于 2014-11-25 18:44
按帖子一步步来的,同一台电脑上的客户端与服务器端已经可以连接,但放在两台电脑上连接失败,出现" ...

指定IP试试。
回复 支持 反对

使用道具 举报

累计签到:56 天
连续签到:1 天
2015-2-27 23:14:53 显示全部楼层
老师,你好。
我用了你这个程序,服务端放在我电脑,客户端放在连了外网的电脑(跟我电脑连的网不一样),无法连接,客户端已经指定了我电脑的ip和端口号,我还在路由器上设置了虚拟服务器,保证外网访问路由网络的ip时直接映射到我电脑上,我知道不是程序的问题,就想问一下怎样才能让外网的客户端可以连接上我的服务端?@yafeilinux  
回复 支持 反对

使用道具 举报

累计签到:743 天
连续签到:13 天
2015-3-4 12:03:00 显示全部楼层
侠隐 发表于 2015-2-27 23:14
老师,你好。
我用了你这个程序,服务端放在我电脑,客户端放在连了外网的电脑(跟我电脑连的网不一样), ...

那样需要你将自己的机子设置为服务器。

一般的实现方式是用网络服务器作为中转站实现的,类似于QQ
回复 支持 反对

使用道具 举报

累计签到:97 天
连续签到:1 天
2015-7-18 13:23:31 显示全部楼层
shasidaran 发表于 2014-11-25 18:44
按帖子一步步来的,同一台电脑上的客户端与服务器端已经可以连接,但放在两台电脑上连接失败,出现" ...

你好,请问你后来这个问题解决没有?
我现在也碰到同样的问题
回复 支持 反对

使用道具 举报

累计签到:97 天
连续签到:1 天
2015-7-18 13:25:49 显示全部楼层
我把服务器端放在了开发板
客户端在PC
开发板和PC在同一个局域网内
在PC端ping开发板的IP可以ping通
但是无法通信
不知道问题出在哪里了

点评

解决了 你修改下服务器端程序的QHostAddresscalHost  详情 回复 发表于 2015-7-18 17:35
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册