在希望的田野上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条回答

    报告相同问题?

    悬赏问题

    • ¥30 dspbuilder中使用signalcompiler时报错Error during compilation: Fitter failed,求解决办法
    • ¥15 gwas 分析-数据质控之过滤稀有突变中出现的问题
    • ¥15 没有注册类 (异常来自 HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
    • ¥15 知识蒸馏实战博客问题
    • ¥15 用PLC设计纸袋糊底机送料系统
    • ¥15 simulink仿真中dtc控制永磁同步电机如何控制开关频率
    • ¥15 用C语言输入方程怎么
    • ¥15 网站显示不安全连接问题
    • ¥15 51单片机显示器问题
    • ¥20 关于#qt#的问题:Qt代码的移植问题