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

简介: 问题一、VS2008中,CString转化为char*时,GetBuffer(m_str.GetLength())等屡试不爽?解决方案:无奈网友这个函数还好使[大家不用再发帖问了,这是相对较好的解决方案],主要是Unicode和GB2312编码方式的不同,一般出现在winsock的send或recv函数buf处。可以使用如下函数实现上述功能。————————————————版权声明:本文为CSDN博主「铭毅天下」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/laoyang360/article/d

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

解决方案:无奈网友这个函数还好使[大家不用再发帖问了,这是相对较好的解决方案],主要是Unicode和GB2312编码方式的不同,一般出现在winsock的send或recv函数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提供了消息机制的网络事件选择,一旦有数据到来就会触发相应的事件,操作系统会通过一个消息来通知调用线程,后者可以在消息响应函数中接收这个数据。


————————————————

版权声明:本文为CSDN博主「铭毅天下」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/laoyang360/article/details/7734971


相关文章
|
17天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信
|
1月前
|
Python
如何在Python中实现线程之间的同步和通信?
【2月更文挑战第17天】【2月更文挑战第51篇】如何在Python中实现线程之间的同步和通信?
|
2月前
|
安全 Java 开发者
丢失的8小时去哪里了?SimpleDateFormat线程不安全,多线程初始化异常解决方案
丢失的8小时去哪里了?SimpleDateFormat线程不安全,多线程初始化异常解决方案
36 0
|
3月前
|
数据处理
多线程与并发编程【线程对象锁、死锁及解决方案、线程并发协作、生产者与消费者模式】(四)-全面详解(学习总结---从入门到深化)
多线程与并发编程【线程对象锁、死锁及解决方案、线程并发协作、生产者与消费者模式】(四)-全面详解(学习总结---从入门到深化)
43 1
|
1月前
|
消息中间件 并行计算 网络协议
探秘高效Linux C/C++项目架构:让进程、线程和通信方式助力你的代码飞跃
探秘高效Linux C/C++项目架构:让进程、线程和通信方式助力你的代码飞跃
34 0
|
1月前
|
存储 Java 数据库连接
线程通信(CountDownLatch、CyclicBarrier、Semaphore、Exchanger)
线程通信(CountDownLatch、CyclicBarrier、Semaphore、Exchanger)
34 0
|
1月前
|
安全
多线程通信
多线程通信
|
1月前
|
缓存 安全 Java
线程安全的问题以及解决方案
线程安全的问题以及解决方案
|
2月前
|
Go 调度 开发者
Go语言并发基础:轻量级线程与通道通信
【2月更文挑战第6天】本文介绍了Go语言在并发编程方面的基础知识和核心概念。我们将深入探讨goroutine(轻量级线程)的创建与调度,以及如何利用channel进行goroutine间的通信与同步。此外,还将简要提及select语句的使用,并解释其在处理多个channel操作时的优势。
|
2月前
|
并行计算 Java API
深入理解Java多线程编程:创建、状态管理、同步与通信
深入理解Java多线程编程:创建、状态管理、同步与通信