基于阻塞发送和接收二进制数据。
比如可以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里的OnReceive和OnAccept消息处理函数,其原理分别是:
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通信涉及了TCP连接的建立、数据交换和异常处理等核心概念。理解这些原理和API的使用,有助于构建稳定的网络应用。在实际项目中,还需要考虑多线程、并发连接管理、错误处理...
在"实例305——使用CSocket进行有连接(TCP)通信"这个文件中,应该包含了完整的客户端和服务器端代码示例,演示了如何利用CSocket类实现TCP通信的全过程。通过阅读和理解这些代码,你可以更直观地学习TCP通信的具体...
4. 当有客户端连接时,Accept方法会阻塞直到接受到新的连接请求,并返回一个新的Socket对象用于与客户端通信。 5. 使用Receive和Send方法通过Socket发送和接收数据。 客户端的实现相对简单: 1. 创建Socket实例,...
`CSocket`包含了创建、连接、接收和发送数据等基本功能,适合用于构建客户端和服务器端的应用。 在`描述`中提到的“聊天”功能,通常涉及到以下知识点: 1. **服务器端编程**:使用`CSocket`创建服务器端,首先要...
- **客户端**:客户端的`CSocket`连接到服务器指定的IP和端口,一旦连接成功,客户端创建一个新线程用于发送文件数据。文件数据通常被分块发送,以适应网络条件和防止阻塞。 4. **数据传输** 数据传输过程中,...
CSocket编程是Windows环境下进行网络通信的一种方法,它是MFC(Microsoft Foundation Classes)库中对Windows Socket API(Winsock)的封装,使得开发者能够更方便地处理网络连接和数据传输。CSocket类是从...
综上所述,这个项目展示了如何使用CSocket类和MFC框架实现一个基于TCP的聊天应用,其中包括客户端和服务端的连接、通信以及文件传输功能。开发者可以通过学习此项目,掌握网络编程的基础知识,以及如何在实际应用中...
CSocket类的主要功能包括连接、监听、发送和接收数据。在创建CSocket对象后,你需要调用Create函数来初始化套接字,并设置相应的端口号。一旦创建完成,你可以使用Connect函数来连接到远程服务器,或者如果作为...
`CSocket`提供了创建、连接、发送和接收数据的基本操作。 **3. 创建Socket对象** 创建`CSocket`对象时,需要调用`Create()`函数,指定使用的套接字类型(通常为SOCK_STREAM,对应TCP)和协议(通常为AF_INET,对应...
1. **初始化**: 客户端也需要创建CSocket对象,但不需要绑定到特定的IP和端口,而是通过`Connect()`函数连接到已知的服务器地址和端口。 2. **连接服务器**: `Connect()`函数会尝试与服务器建立连接。如果连接成功,...
在这个主题中,我们将深入探讨如何使用CSocket类来实现在局域网内的TCP和UDP通信,并且重点是同步(阻塞)模式。 首先,TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它确保数据的顺序...
对于初学者来说,这是一个很好的起点,因为它将介绍如何使用非阻塞I/O模式来处理并发连接。 【CSocket基础】 1. **CSocket类**:这是Microsoft Visual C++ MFC(Microsoft Foundation Classes)提供的一个类,用于...
`CSocket`类是MFC中的一个核心组件,主要用于创建和管理网络连接。它提供了双向数据流,即既可以发送数据,也可以接收数据。`CSocket`类基于底层的Socket接口,该接口是Internet通信的基础,可以用来创建客户端和...
每个客户端连接都在单独的线程中运行,以避免阻塞其他连接。 5. **用户界面**:VC++中的MFC框架提供了一些UI控件,如CEdit和CEditView,可以用来显示和接收用户的输入。在聊天室应用中,我们需要创建这样的UI元素来...
3. 连接和接收:客户端使用Csocket连接到服务器,服务器端接收连接请求并处理。 ```csharp Socket clientSocket = socket.Accept(); byte[] buffer = new byte[1024]; int received = clientSocket.Receive(buffer)...
这些文件可能包含创建、连接、发送和接收数据的具体实现,是学习CSocket类使用的好素材。通过分析和运行这些代码,你可以更好地理解CSocket类在C/S通讯中的应用。 总之,CSocket类简化了Windows平台下的网络编程,...
具体到`CAsyncSocket`和`CSocket`的成员函数,`CSocket`提供了如`Accept()`(接收连接请求)、`Bind()`(绑定本地端口)、`Connect()`(建立连接)和`Receive()`/`Send()`(发送和接收数据)等基本操作。而`...
6. **断开连接**:当通信完成后,客户端和服务器都需要关闭`CSocket`连接。这可以通过调用`Close`函数来实现。 在“程序3.3”和“程序3.4”中,可能包含了实现这些功能的源代码。通常,`程序3.3`会是服务器端代码,...
### MFC 下 CSocket 编程详解 ...以上示例展示了如何使用 `CSocket` 类实现客户端和服务端的基本通信过程。需要注意的是,这些示例代码仅为基本框架,实际应用中可能还需要考虑异常处理、线程安全等问题。
总之,使用VS2010的MFC和`CSocket`类进行大文件TCP传输涉及了网络编程的基本概念,包括套接字的创建、连接、数据交换以及错误处理。理解并掌握这些技能,对于开发涉及网络通信的应用程序至关重要。通过实际操作和...