`

CSocket关于连接和阻塞!!

阅读更多

基于阻塞发送和接收二进制数据。

比如可以Client端发送,Server端接收

Server端:m_recvive. Receive( void* lpBuf int nBufLen int nFlags = 0 );

Client端:m_client. Send( const void* lpBuf int nBufLen int nFlags = 0 );

接着再分析一下各个类中提到的常用方法的同步特性。

Listen(…):执行后不管有没有连接,立即返回。

Connect(…):如果服务器端有端口正在侦听,则立即成功返回,如果没有,则过几秒钟显示无法连接。

Accept(…):Listen函数返回后可以执行此函数,但是此函数是基于阻塞的,只要客户机connect连接并且端口正确,则立即成功返回,建立连接。如果迟迟侦测不到连接,则不断阻塞,直到连接成功或者强行关闭。

Send(…)调用后就将数据保存在socket缓冲区中,立即返回。

Receive(…):和Accept一样的阻塞,直到能从socket缓冲区成功读取到nBufLen长度的数据。

既然如此,应该会想到这样会产生两个问题:

1、 在侦听的时候,如果客户端迟迟没有连接,则侦听方执行到Accept则阻塞不能响应。

2、 在用Receive接收数据,如果迟迟得不到发送的数据,也阻塞不能响应。

带有这两个问题的软件显然是不能忍受的。

幸亏CSocket类里可以使用继承自CAsyncSocket里的OnReceiveOnAccept消息处理函数,其原理分别是:

1、 OnAccept()Listen过后,如果侦测到客户机有连接,则产生消息调用OnAccept(),一般可以在此函数里面调用Accept便可避免侦听时的阻塞。

virtual void OnAccept( int nErrorCode );

参数nErrorCode:套接字上最近的错误代码。此成员函数可用的错误代码有:

l 0:函数成功地执行并返回。

l WSAENETDOWN:Windows Sockets检测到网络系统故障。说明由框架调用,通知监听套接字现在可以调用Accept成员函数来接收挂起的连接请求(有connect请求进入)。

2、 OnReceive():建立连接后,如果侦测到Socket缓冲区里有数据到达,便自动调用OnReceive(),在此函数里面使用Receive接收就可避免接收数据的阻塞。

virtual void OnReceive( int nErrorCode );参数nErrorCode套接字上最近的错误代码。此成员函数可用的错误代码有:

l 0:函数成功地执行并返回。

l WSAENETDOWN:Windows Sockets检测到了网络故障。说明本函数由框架调用,通知套接字缓冲中有数据,可以调用Receive成员函数取出。

分享到:
评论

相关推荐

    VC编程实现使用CSocket进行有连接(TCP)通信

    总的来说,VC++编程中使用CSocket类进行TCP通信涉及了TCP连接的建立、数据交换和异常处理等核心概念。理解这些原理和API的使用,有助于构建稳定的网络应用。在实际项目中,还需要考虑多线程、并发连接管理、错误处理...

    用CSocket进行有连接(TCP)通信

    在"实例305——使用CSocket进行有连接(TCP)通信"这个文件中,应该包含了完整的客户端和服务器端代码示例,演示了如何利用CSocket类实现TCP通信的全过程。通过阅读和理解这些代码,你可以更直观地学习TCP通信的具体...

    c#CSOCKET编程文档及实例含有客户端和服务器端源码

    4. 当有客户端连接时,Accept方法会阻塞直到接受到新的连接请求,并返回一个新的Socket对象用于与客户端通信。 5. 使用Receive和Send方法通过Socket发送和接收数据。 客户端的实现相对简单: 1. 创建Socket实例,...

    聊天 CSocket

    `CSocket`包含了创建、连接、接收和发送数据等基本功能,适合用于构建客户端和服务器端的应用。 在`描述`中提到的“聊天”功能,通常涉及到以下知识点: 1. **服务器端编程**:使用`CSocket`创建服务器端,首先要...

    采用CSocket和多线程编写的文件传输程序

    - **客户端**:客户端的`CSocket`连接到服务器指定的IP和端口,一旦连接成功,客户端创建一个新线程用于发送文件数据。文件数据通常被分块发送,以适应网络条件和防止阻塞。 4. **数据传输** 数据传输过程中,...

    CSocket编程介绍

    CSocket编程是Windows环境下进行网络通信的一种方法,它是MFC(Microsoft Foundation Classes)库中对Windows Socket API(Winsock)的封装,使得开发者能够更方便地处理网络连接和数据传输。CSocket类是从...

    CSocket通信(客户端和服务端)

    综上所述,这个项目展示了如何使用CSocket类和MFC框架实现一个基于TCP的聊天应用,其中包括客户端和服务端的连接、通信以及文件传输功能。开发者可以通过学习此项目,掌握网络编程的基础知识,以及如何在实际应用中...

    MFC下CSocket编程详解代码实例

    CSocket类的主要功能包括连接、监听、发送和接收数据。在创建CSocket对象后,你需要调用Create函数来初始化套接字,并设置相应的端口号。一旦创建完成,你可以使用Connect函数来连接到远程服务器,或者如果作为...

    CSocket MFC 传递文件

    `CSocket`提供了创建、连接、发送和接收数据的基本操作。 **3. 创建Socket对象** 创建`CSocket`对象时,需要调用`Create()`函数,指定使用的套接字类型(通常为SOCK_STREAM,对应TCP)和协议(通常为AF_INET,对应...

    CSocket类的网络通信实例

    1. **初始化**: 客户端也需要创建CSocket对象,但不需要绑定到特定的IP和端口,而是通过`Connect()`函数连接到已知的服务器地址和端口。 2. **连接服务器**: `Connect()`函数会尝试与服务器建立连接。如果连接成功,...

    CSocket类的使用,实现TCP/UDP在局域网内通信

    在这个主题中,我们将深入探讨如何使用CSocket类来实现在局域网内的TCP和UDP通信,并且重点是同步(阻塞)模式。 首先,TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它确保数据的顺序...

    简单的聊天室(基于CSocket,C/S)

    对于初学者来说,这是一个很好的起点,因为它将介绍如何使用非阻塞I/O模式来处理并发连接。 【CSocket基础】 1. **CSocket类**:这是Microsoft Visual C++ MFC(Microsoft Foundation Classes)提供的一个类,用于...

    MFC-CSocket-user.rar_MFC cSOCKET_网络 CSocket

    `CSocket`类是MFC中的一个核心组件,主要用于创建和管理网络连接。它提供了双向数据流,即既可以发送数据,也可以接收数据。`CSocket`类基于底层的Socket接口,该接口是Internet通信的基础,可以用来创建客户端和...

    CSocket实现聊天室

    每个客户端连接都在单独的线程中运行,以避免阻塞其他连接。 5. **用户界面**:VC++中的MFC框架提供了一些UI控件,如CEdit和CEditView,可以用来显示和接收用户的输入。在聊天室应用中,我们需要创建这样的UI元素来...

    csocket在C#中的编程应用

    3. 连接和接收:客户端使用Csocket连接到服务器,服务器端接收连接请求并处理。 ```csharp Socket clientSocket = socket.Accept(); byte[] buffer = new byte[1024]; int received = clientSocket.Receive(buffer)...

    利用CSocket类轻松实现C/S通讯

    这些文件可能包含创建、连接、发送和接收数据的具体实现,是学习CSocket类使用的好素材。通过分析和运行这些代码,你可以更好地理解CSocket类在C/S通讯中的应用。 总之,CSocket类简化了Windows平台下的网络编程,...

    csocket和casyncsocket的区别_CAsyncSocket_csocketcasyncsocket_

    具体到`CAsyncSocket`和`CSocket`的成员函数,`CSocket`提供了如`Accept()`(接收连接请求)、`Bind()`(绑定本地端口)、`Connect()`(建立连接)和`Receive()`/`Send()`(发送和接收数据)等基本操作。而`...

    CSocket实现局域网聊天

    6. **断开连接**:当通信完成后,客户端和服务器都需要关闭`CSocket`连接。这可以通过调用`Close`函数来实现。 在“程序3.3”和“程序3.4”中,可能包含了实现这些功能的源代码。通常,`程序3.3`会是服务器端代码,...

    MFC下CSocket编程详解.pdf

    ### MFC 下 CSocket 编程详解 ...以上示例展示了如何使用 `CSocket` 类实现客户端和服务端的基本通信过程。需要注意的是,这些示例代码仅为基本框架,实际应用中可能还需要考虑异常处理、线程安全等问题。

    VS2010编写CSocket大文件TCP传送

    总之,使用VS2010的MFC和`CSocket`类进行大文件TCP传输涉及了网络编程的基本概念,包括套接字的创建、连接、数据交换以及错误处理。理解并掌握这些技能,对于开发涉及网络通信的应用程序至关重要。通过实际操作和...

Global site tag (gtag.js) - Google Analytics