fd_read-请教网络编程中FD_READ问题

问题描述

请教网络编程中FD_READ问题

网络编程新手,请各位高人不吝指教
windows编程接收网络发来的消息,在头文件申明了消息映射函数用于处理FD_READ
afx_msg LRESULT OnHardTcpSock(WPARAM wParam, LPARAM lParam);

现在的问题是这样的,当上一个FD_READ消息还在OnHardTcpSock函数中处理但尚未处理完成的时候,新的一个FD_READ又到达了,这个时候系统是如何应对的?

1、等待当前FD_READ消息处理完,再去处理新的FD_READ消息?
2、中断当前FD_READ,转去处理新的FD_READ?
3、暂停当前FD_READ,转去处理新的FD_READ,处理完新的FD_READ,再去处理旧的FD_READ?
4、其它?

请高人们指点!非常感谢

解决方案

tcp/ip 数据包的最大长度为1500,所以一般是循环接收,当接收到一个完整的消息再去处理。
在处理消息的过程中,新发送过来的消息会放在socket缓冲区。
用 recv函数接收数据是将socket缓冲区的内容拷贝到系统缓冲区。

时间: 2025-01-04 10:51:08

fd_read-请教网络编程中FD_READ问题的相关文章

多线程在Visual C#网络编程中的应用

visual|编程|多线程|网络 网络应用程序的一般都会或多或少的使用到线程,甚至可以说,一个功能稍微强大的网络应用程序总会在其中开出或多或少的线程,如果应用程序中开出的线程数目大于二个,那么就可以把这个程序称之为多线程应用程序.那么为什么在网络应用程序总会和线程交缠在一起呢?这是因为网络应用程序在执行的时候,会遇到很多意想不到的问题,其中最常见的是网络阻塞和网络等待等. 程序在处理这些问题的时候往往需要花费很多的时间,如果不使用线程则程序在执行时的就会表现出如运行速度慢,执行时间长,容易出现错

正则表达式在网络编程中的运用(1)

编程|网络|正则 [前言:]在我们编写WEB程序时,经常会判断一个字符串的有效性,如:一个串是否是数字.是否是有效的Email地址等等.如果不使用正则表达式,那么判断的程序会很长,并且容易出错,如果使用正则表达式,这些判断就是一件很轻松的工作了.本文全面介绍正则表达式的慨念.格式.并以在PHP.ASP中的应用实例增加读者的感性认识.正则表达式的应用很广,需要大家在学习和实践中不断的总结. 正则表达式简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.在网络编程中应用广泛,如PH

正则表达式在网络编程中的运用(3)

编程|网络|正则 应用实例 在对正则表达式有了较为全面的了解之后,就可以在Perl,PHP,以及ASP等程式中使用正则表达式了. 下面以PHP语言为例,使用验证用户在线输入的邮件地址以及网址的格式是否正确.PHP 提供了eregi()或ereg()资料处理函数实现字串比对剖析的模式匹配操作ereg()函数的使用格式如下: ereg (pattern, string) 其中,pattern代表正则表达式的模式:而string则是执行查找替换操作的目标对象,如Email地址值.本函式以 patter

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

问题描述 网络编程中并未建立连接的端口却能往套接字中写,发送数据,困惑 拜托各位了,碰上一个难以理解的困惑 情况如下 我在qt中编写了一个客户端(抛开qt,也可以理解为别的写的),在这个应用程序中有一个对象是专门用来建立连接并且处理和服务器的相关的通信. 服务器的话是在linux下c写的,简单的可以看做这种模式accept等待连接,连接成功后阻塞读写 while(1) { clientfd = accept(lfd, null, null): printf("new connectn"

服务器-关于java网络编程中获取输入流中数据的问题?

问题描述 关于java网络编程中获取输入流中数据的问题? //服务器端接收消息的类.定制端口号为8888 serviceSocket = new ServerSocket(10000); //获取socket.这个方法是阻塞式的 socket = serviceSocket.accept(); inputStream = socket.getInputStream(); byte buf[] = new byte[1024]; int len = 0; len =inputStream.read

java网络编程中IO数据输入输出阻塞

问题描述 java网络编程中IO数据输入输出阻塞 服务端代码如下: public class Server { public static void main(String[] args) throws IOException { ServerSocket ss = new ServerSocket(30000); Socket socket = ss.accept(); PrintStream ps = new PrintStream(socket.getOutputStream()); ps

请问各位,在C#网络编程中,如果要实现不在一个局域网内的两台电脑的通信,我该怎么实现?

问题描述 请问各位,在C#网络编程中,如果要实现不在一个局域网内的两台电脑的通信,我该怎么实现?初学者的问题,谢谢了 解决方案 解决方案二:没有人,自己顶起来解决方案三:不能沉啊,自己顶起来,拜托各位大侠了解决方案四:你可以了解下NAT穿透

java网络编程-Java网络编程中不可以使用缓存吗??

问题描述 Java网络编程中不可以使用缓存吗?? 我使用缓存总是什么都不显示,但是又不抛出异常,也没有什么错! 解决方案 java网络编程之缓存java网络编程之缓存(三)对使用Java Socket网络编程的详细讲解 解决方案二: http://blog.sina.com.cn/s/blog_616e189f0100s3px.html 解决方案三: 是不是其他问题啊?可以使用缓存的,可以贴出主要代码 解决方案四: import java.io.BufferedOutputStream; imp

网络编程中的协议问题

问题描述 网络编程中的协议问题 qq登录前的两种不同协议设置(TCP/IP和UDP)对qq的登陆有什么影响?