csocket,CSOCKET 接受实现

http://www.itjxue.com  2023-01-20 00:42  来源:未知  点击次数: 

vc 如何多线程处理CSocket数据

因为CSocket类要用到窗口的消息机制才能进行收发,所以用线程可以这样用的,你可以参考用如下的方法:

CMySocket*

pSocket;

...

ThreadFunc(

)

{

pSocket

new

CSocket;

pSocekt-Create();

pSocket-Connect(...);

while(...)

{

MSG

msg;

Sleep(

5

);

if

(

::PeekMessage(msg,

NULL,

NULL,

NULL,

PM_REMOVE

)

)

{

::TranslateMessage(

msg

);

::DispatchMessage(

msg

);

}

。。。

//线程的其他代码

);

}

希望以上的代码对你有用

CSocket怎么设置连接超时

如果你非要用csocket,只好自己在窗口中加个定时器来判断超时了,还要设置为非阻塞模

式。如果你非要用socket来直接判断超时,建议你该用winsock

2.0的api来写,可以设置超时。

CAsyncSocket及CSocket的区别和用法

CAsyncSocket与CSocket的区别:

前者是异步通信,后者是同步通信;前者是非阻塞模式,后者是阻塞模式。另外,异步非阻塞模式有

时也被称为长连接,同步阻塞模式则被称为短连接。

使用CAsyncSocket时,Send流程和Recieve流程是不同的,不理解这一点就不可能顺利使用CAsyncSocket。

MSDN对CAsyncSocket的解释很容易让你理解为:只有OnSend被触发时你Send才有意义,你才应该Send,

同样只有OnRecieve被触发时你才应该Recieve。很不幸,你错了:

你会发现,连接建立的同时,OnSend就第一次被触发了,嗯,这很好,但你现在还不想Send,你让OnSend

返回,干点其他的事情,等待下一次OnSend试试看?实际上,你再也等不到OnSend被触发了。因为,除

了第一次以外,OnSend的任何一次触发,都源于你调用了Send,但碰到了WSAEWOULDBLOCK!

(责任编辑:IT教学网)

更多

推荐SQL Server文章