在希望的田野上cgy 2014-10-29 03:53
浏览 821

网络编程中并未建立连接的端口却能往套接字中写,发送数据,困惑

拜托各位了,碰上一个难以理解的困惑

情况如下
我在qt中编写了一个客户端(抛开qt,也可以理解为别的写的),在这个应用程序中有一个对象是专门用来建立连接并且处理和服务器的相关的通信。

服务器的话是在linux下c写的,简单的可以看做这种模式accept等待连接,连接成功后阻塞读写
while(1) {
clientfd = accept(lfd, null, null);
printf("new connect\n");
while(1) {
if((n = read(clientfd, buf, 2)) == -1) {
perror("read faild");
close(clientfd);
break;
} else if(n != 2){
printf("not right head\n");
continue;
}

  ```
  func(buf, fd);//回复客户端

}
}

那么问题来了,我不小心在改程序时建立了两个这个对象
对象的层次关系变成如下
主窗体 A
主窗体下两个子窗体 B C(C为用于处理网络的)
而B下又有一个C1(和C是一样的)

当程序启动时建立连接客户端向服务器发送某一请求,服务器回复成功,但是我客户端接收数据,但是并未达到我想要的结果,不过这个不是重点;

当我对客户端操作后,客户端会向套接字写数据,
n = tcp->write(```);
qdebuf() << " write num = " << n;
每操作一次,他都会输出写了多少个字节,用抓包工具显示其也确实发生了该数据,但是在服务器却一直阻塞在读的那一步,这个也很好理解,因为他只和某一个地址的某一端口建立了连接,别的端口他也读取不了。这就可以推测出,客户端在操作时其建立连接的对象是C1,而不是C,(因为我是在A中绑定了B,C的槽)操作B时C的槽响应,

那真正令人费解的是,C1和C应该只能有一个能建立连接成功,而且从服务器的响应来看他是和C1建立连接了,但是为什么C却每次能写成功?

附上抓包工具抓包的情况分析

CSDN移动问答

![CSDN移动问答][2]

13-18是操作客户端后的,然后没操作一次都客户端都会提示写了19字;但是在服务器端不能读取信息,也就是说建立连接的不是这个端口呗?
1-12是一开始建立连接的时候包的情况,开始建立的时候客户端也给服务器发送了一个数据,服务器接收成功也给他回复了一个

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 乘性高斯噪声在深度学习网络中的应用
    • ¥15 运筹学排序问题中的在线排序
    • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
    • ¥30 求一段fortran代码用IVF编译运行的结果
    • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
    • ¥15 C++ 头文件/宏冲突问题解决
    • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
    • ¥50 安卓adb backup备份子用户应用数据失败
    • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
    • ¥30 python代码,帮调试,帮帮忙吧