`
zhangziyangup
  • 浏览: 1187360 次
文章分类
社区版块
存档分类
最新评论

VS2008多线程WinSock通信中常见问题及解决方案

 
阅读更多

VS2008多线程WinSock通信中常见问题及解决方案

问题一、VS2008中,CString转化为char*时,GetBuffer(m_str.GetLength())等屡试不爽?

解决方案无奈网友这个函数还好使[大家不用再发帖问了,这是相对较好的解决方案],主要是UnicodeGB2312编码方式的不同,一般出现在winsocksendrecv函数buf处。可以使用如下函数实现上述功能。

char* CStringToCharArray(CString str)
{
	char *ptr;
#ifdef _UNICODE
	LONG len;
	len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
	ptr = new char [len+1];
	memset(ptr,0,len + 1);
	WideCharToMultiByte(CP_ACP, 0, str, -1, ptr, len + 1, NULL, NULL);
#else
	ptr = new char [str.GetAllocLength()+1];
	sprintf(ptr,_T("%s"),str);
#endif
	return ptr;
}

问题二、用户自定义消息的格式模板

解决方案:用户自定义的消息的格式,只需要在msdn里输入ON_MESSAGE即可。

//(1)自定义消息
#define WM_MYMESSAGE (WM_USER + 100)
//(2)消息映射
BEGIN_MESSAGE_MAP(CMyWnd2, CWnd)
   ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
END_MESSAGE_MAP()
//(3)消息映射函数
LRESULT CMyWnd2::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
   UNREFERENCED_PARAMETER(wParam);
   UNREFERENCED_PARAMETER(lParam);

   // Handle message here.

   return 0;
}


问题三、同步异步套接字的本质区别?

解决方案:

套接字

阻塞/非阻塞

效率

特征

同步套接字

阻塞

较低

执行Winsock函数会一直等待

异步套接字

非阻塞

Winsock函数立即返回,采取基于消息的异步存取策略

异步选择函数WSAAsyncSelect提供了消息机制的网络事件选择,一旦有数据到来就会触发相应的事件,操作系统会通过一个消息来通知调用线程,后者可以在消息响应函数中接收这个数据。





分享到:
评论

相关推荐

    socket多线程通信

    Socket多线程通信是网络编程中的一个重要概念,它结合了Socket接口与多线程技术,以提高服务端处理客户端请求的效率。C/S(Client/Server)模型是网络通信的基本架构,其中C代表客户端,S代表服务器端。在这个模型中...

    C/S通信 Winsock

    6. **多线程**:在VB6.0中,为了处理多个并发连接或避免阻塞用户界面,可能需要使用多线程技术。每个连接可以在一个单独的线程中运行,从而实现并行处理。 7. **错误处理**:在编写Winsock程序时,需要处理各种可能...

    TCP/IP Winsock编程要点---利用Winsock编程由同步和异步方式,同步方式逻辑清晰,编程专注于应用,在抢先式的多任务操作系统中(WinNt、Win2K)采用多线程方式效率基本达到异步方式的水平

    同步方式通常逻辑结构清晰,程序员更专注于应用层面的处理,而在像Windows NT和Windows 2000这样的抢先式多任务操作系统中,通过使用多线程技术,同步方式的效率几乎可以与异步方式相当。 首先,我们要关注的一个...

    winsock 双向通信 clint端

    在IT行业中,网络通信是至关重要的一个领域,而Winsock是Windows操作系统提供的API(应用程序接口),用于实现TCP/IP协议栈的编程。本篇文章将详细探讨"Winsock 双向通信客户端"这一主题,旨在帮助初学者理解并实现...

    VB6.0使用winsock控件实现聊天程序(源代码)

    解决方法可能包括调整控件的属性、使用兼容模式运行程序,或者寻找替代的网络通信库。 6. 源代码分析 由于没有提供具体的源代码,我们无法详细分析其结构和功能。但根据标题,我们可以推测源代码包含了服务器和...

    WinSock文件.zip

    6. **多线程支持**:在多线程环境中,Winsock允许并发的网络请求,提高了应用程序的性能。 在修复Winsock问题时,除了使用这个压缩包提供的文件,还可以尝试以下步骤: 1. **系统还原**:如果系统之前创建了还原点...

    全双工语音通信 Winsock

    2. **多线程处理**:为了保证通信的实时性,需要使用多线程技术来分别处理发送和接收任务,从而避免阻塞现象。 3. **错误处理机制**:在网络通信中,可能会遇到各种各样的错误情况,如丢包、连接中断等。因此,需要...

    Delphi之TServerSocket和TClientSocket多线程传输

    多线程传输是解决并发问题的关键。在Delphi中,我们可以使用TThread类来创建自定义线程,每个线程负责处理一个特定的客户端连接。例如,在服务器端,当TServerSocket的OnAccept事件触发时,可以创建一个新的TThread...

    winsock

    - winsock.pdf:这可能是一份详细的Winsock技术文档,涵盖了Winsock的基本概念、API函数的使用方法、实例代码以及常见问题的解决策略。读者可以通过阅读这份PDF来深入理解Winsock的工作原理和应用技巧。 - winsocket...

    基于WINSOCK的WEB SERVER

    【标题】基于WINSOCK的WEB SERVER 在IT领域,网络通信是不可或缺的一部分,而WINSOCK(Windows Socket)就是...通过VS2005这样的开发环境,开发者可以高效地实现这一目标,从而构建自己的定制化Web服务器解决方案。

    VB winsock 实现 FTP

    在VB(Visual Basic)编程环境中,Winsock控件是一个强大的工具,用于实现网络通信功能,包括文件传输协议(FTP)。FTP是一种广泛使用的互联网协议,允许用户上传、下载和管理远程服务器上的文件。在这个主题中,...

    vc 多线程与套接字学习

    同时,经典学习网站可能提供了更深入的理论讲解、实战技巧和常见问题的解决方案。 学习多线程与套接字编程,不仅要求掌握基本的API使用,还需要理解操作系统对线程管理和网络通信的支持,以及相关的网络协议如TCP/...

    Modbus-Tcp通信线程的实现

    Modbus-Tcp通信线程的实现是工业...总之,实现Modbus-Tcp通信线程是一项涉及网络编程和多线程技术的任务,通过理解协议规范、熟悉Winsock库和多线程编程,可以在VC环境下创建出高效、可靠的Modbus-Tcp通信解决方案。

    Winsock 2 网络编程实用教程.pdf

    《Winsock 2 网络编程实用教程》是一份深度探索Windows环境下网络编程技术的指南,主要聚焦于Winsock 2,这是Windows系统中进行网络通信的核心API(应用程序接口)。Winsock,全称为Windows Socket,是Microsoft为...

    异步套接字 短信猫 多线程

    在这个特定的程序包中,它们被融合在一起,为开发者提供了一种高效且灵活的解决方案。下面我们将深入探讨这三个核心概念以及它们如何协同工作。 首先,异步套接字是网络编程中的一个关键概念,它允许应用程序在不...

    Winsock编程(PDF版)

    6. **多线程与异步编程**:在处理多个并发连接时,多线程或异步I/O模型(如IOCP)是常用的方法,这会涉及Windows的线程管理和事件处理机制。 7. **套接字选项**:`setsockopt`和`getsockopt`函数允许开发者调整套接...

    Winsock控件报告.rar

    这个“Winsock控件报告”主要探讨了Winsock控件的基础知识、应用方法以及常见问题的解决策略。 首先,Winsock控件是基于Windows Socket API(也称为Winsock)的,它是一个标准的API,允许程序员直接与网络协议进行...

    VB Winsock API高级编程调用大全(包括3个.bas 函数声明库)

    而Readme.txt文件可能包含了关于如何导入和使用这些函数声明库的指导,以及可能遇到的问题和解决方案。 在实际开发中,VB Winsock API可以用来创建各种网络应用,如聊天程序、文件传输工具、在线游戏、远程控制软件...

    vc++网络通信编程实用案例精选

    三、常见问题及解决方案 1. 错误处理:在使用Winsock编程时,需要处理各种错误,如网络中断、连接失败等。通过检查函数返回值和使用`WSAGetLastError()`获取错误码,可以找出问题所在。 2. 并发处理:服务器可能...

Global site tag (gtag.js) - Google Analytics