用WinSocket2 API进行通讯的问题(初级)! 必须这样,要用WINSOCK2就必须这样,你可以自己封装一个类实现事件驱动。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以用WSAAsyncSelect(.......),给他个回调涵数来处理消息,不用去循环检查,只要一次绑定,以后只要有事件(FD_READ,FD_ACCEPT.....)来了,他自己会产生你自定义的消息,从而引发你的回调涵数.如果不会WSAAsyncSelect()的话,用select()也可以,也不用循环检查.例子:#define WM_USER+100 WM_MYMSG //定义自己的消息main(){ ........... ........... WSAAsyncSelect( sock, this->m_hwnd, //窗口句柄 WM_MYMSG, //自定义的消息 FD_READ|FD_ACCEPT|FD_CLOSE ); //监视的事件}CALLBACK winproc(.................){ switch(WSAGETSELECTEVENT(lParam)) { case FD_READ: case FS_ACCEPT: .............. }}不过这个适合于窗口编程,如果你想用在DOS下的话,建议用select(),大同小异的. 通过消息来产生,需不用自己去检查事件,使用WSAAsyncSelect注册了事件后,当有数据到达,会发生FD_READ消息,只要处理这个消息就可以了。现样,FD_WRITE,FD_CLOSE等也一样。 请问:风之克利斯异步Socket和同步Socket的区别? sorry.这个概念倒是不太清楚了, 同步socket,当你进行一次recv or send 操作,由于某种原因(例如,数据未到达),程序会阻塞在那里.导致其他操作不能进行下去.异步socket,程序不会阻塞,recv会立即返回(可能会是失败),等真正数据到达后,再通过某种机制通知你. 你的消息循环呢?GetMessageTranslateMessageDispatchMessage 用WSAAsyncSelect()当然你要产生个窗口出来 开一个线程,所有的接收也发送都阻塞在Select. 多谢大家,不过小弟还有一个问题:select函数是工作在阻塞模式吗?比如我调用了select函数但在该socket上什么也没有发生,select函数会立即返回吗?但如果是立即返回,那我怎么知道数据什么时候到达,那还是得用一个循环来检测啊? 可以用 IOCompletePort + Thread pool 来管理所有的socket通信,这是Windows下最好的SocketI/O模型。 to loseworld: 我也初学,我认为select函数是工作在阻塞模式 若在windows下,为何不用WSAAsyncSelect? 明白了,Select 函数实际是工作在阻塞模式下,在该模式下直到选定的事件发生,否则Select 函数是不会返回的。 能够提供一个比较完整的例子吗?最好是实际应用过的。我的email:[email protected] mfc的accelerator怎么用啊? MFC中调用bat的问题 help:向多个机器传输多个文件问题,急!~(高分酬谢) CHtmlView类的使用问题 如何去掉scrollbar的那个拖动块? 如何得知某进程的主线程号? !@%$%^^% 求《VC编程高手》一书的配套光盘代码.在线等呀!^&$%#$ 300分问一个问题 关于enum类型变量的赋值问题(在线等待,来者有分) 我现在对CSDN越来越失望了! 如何判断treectrl中节点是expand 还是collasped 高手请进,将PARADOX7表改用SQL SEVER后,ADO出现的问题。
如果不会WSAAsyncSelect()的话,用select()也可以,也不用循环检查.
例子:
#define WM_USER+100 WM_MYMSG //定义自己的消息
main()
{
...........
...........
WSAAsyncSelect( sock,
this->m_hwnd, //窗口句柄
WM_MYMSG, //自定义的消息
FD_READ|FD_ACCEPT|FD_CLOSE ); //监视的事件
}CALLBACK winproc(.................)
{
switch(WSAGETSELECTEVENT(lParam))
{
case FD_READ:
case FS_ACCEPT:
..............
}
}
不过这个适合于窗口编程,如果你想用在DOS下的话,建议用select(),大同小异的.
异步Socket和同步Socket的区别?
这个概念倒是不太清楚了,
那里.导致其他操作不能进行下去.
异步socket,程序不会阻塞,recv会立即返回(可能会是失败),等真正数据到达后,再通过某种机制
通知你.
GetMessage
TranslateMessage
DispatchMessage
当然你要产生个窗口出来
一个循环来检测啊?
我也初学,我认为select函数是工作在阻塞模式
若在windows下,为何不用WSAAsyncSelect?
我的email:[email protected]