社区
网络编程
帖子详情
在VC中如何将一个UDP的socket设置成为非阻塞的阿?---Online waiting
reclusewood
2002-12-03 04:56:42
rt
...全文
649
11
打赏
收藏
在VC中如何将一个UDP的socket设置成为非阻塞的阿?---Online waiting
rt
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cqjiang
2002-12-04
打赏
举报
回复
http://idoor.xiloo.com 《TCP/IP Winsock高级编程》
ysf1980
2002-12-04
打赏
举报
回复
WSAAsyncSelect():要求某一 Socket 有事件 (event) 发生时通知使用者。
格 式: int PASCAL FAR WSAAsyncSelect( SOCKET s, HWND hWnd, unsigned int wMsg, long lEvent );
参 数: s Socket 的编号
hWnd 动作完成後,接受讯息的视窗 handle
wMsg 传回视窗的讯息
lEvent 应用程式有兴趣的网路事件
传回值: 成功 - 0
失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
WSAAsyncSelect( s, hWnd, 0, 0 ) -- 取消所有 async 事件设定
呼叫 WSAAsyncSelect 的同时也将此一 socket改变成「非阻拦」(non-blocking)模式。但是此时这个 socket 不能很简单地用 ioctlsocket() 这个函式就将它再变回「阻拦」(blocking)模式。也就是说 WSAAsyncSelect 和 ioctlsocket 所改变的「非阻拦」模式仍是有些不同的。如果您想将一个「非同步」(asynchronous)模式的 socket 再变回「阻拦」模式的话,必须
先呼叫 WSAAsyncSelect() 将所有的 async 事件取消,再用 ioctlsocket() 将它变回阻拦模式。
ioctlsocket():控制 Socket 的模式。
格 式: int PASCAL FAR ioctlsocket( SOCKET s, long cmd, u_long FAR *argP );
参 数:s Socket 的识别码
cmd 指令名称
argP 指向 cmd 参数的指标
传回值: 成功 - 0
失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
说明: 此函式用来获取或设定 Socket 的运作参数。
cmd 的值可为:
FIONBIO -- 开关 non-blocking 模式
FIONREAD -- 自 Socket 一次可读取的资料量(目前 in buffer 的资料量)
SIOCATMARK -- OOB 资料是否已被读取完
reclusewood
2002-12-04
打赏
举报
回复
救命啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sjzxyg
2002-12-04
打赏
举报
回复
0
reclusewood
2002-12-04
打赏
举报
回复
顶哦,高手来提示一下!
shesh
2002-12-04
打赏
举报
回复
我以前做的,好象有setsockopt,这是设置超时的.数据报方式的设置是一样的.
不过告诉你.这设置超时只有winsock2.0才支持
WSADATA data;
sockaddr_in addr;
int ret=0;
int optval = 10000;
char m_put_str[512]="";
char m_Port[6];
memset(m_Port,0,sizeof(m_Port));
strcpy(m_Port,(LPCTSTR) AfxGetApp()->GetProfileString("系统设置","TCP侦听端口","3333"));
memset(&addr,0,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(atoi(m_Port));
if(WSAStartup(MAKEWORD(2, 2), &data))
{
return FALSE;
}
if (LOBYTE(data.wVersion)!=2||HIBYTE(data.wVersion)!=2)
{
return FALSE;
}
Sck = socket(AF_INET, SOCK_STREAM, 0);
if(Sck==INVALID_SOCKET)
{
return FALSE;
}
ret = bind(Sck, (sockaddr*)&addr, sizeof(addr));
if(ret==SOCKET_ERROR)
{
return FALSE;
}
if(setsockopt(Sck,SOL_SOCKET,SO_SNDTIMEO,
(char * )&optval,sizeof(optval))==SOCKET_ERROR)
{
return FALSE;
}
if(setsockopt(Sck,SOL_SOCKET,SO_RCVTIMEO,
(char * )&optval,sizeof(optval))==SOCKET_ERROR)
{
return FALSE;
}
if(listen(Sck, SOMAXCONN) == SOCKET_ERROR)
{
return FALSE;
}
DWORD m_ThreadId;
m_ThreadHandle = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) DummyMyThread,
this,CREATE_SUSPENDED|THREAD_TERMINATE,&m_ThreadId);
if(!m_ThreadHandle)
{
return FALSE;
}
ResumeThread(m_ThreadHandle);
return TRUE;
reclusewood
2002-12-03
打赏
举报
回复
WSAAsyncSelect();
setsockopt();
他们中间参数怎么设置阿
ysf1980
2002-12-03
打赏
举报
回复
你用WSAAsyncSelect();
它自动就变为非阻塞模式,除非你用setsockopt()
改变它
reclusewood
2002-12-03
打赏
举报
回复
拜托写详细一点,我也在看msdn,不过没有什么头绪
救命啊~~~~~~~~~~~~~~~~`
reclusewood
2002-12-03
打赏
举报
回复
兄弟哦,详细一些,多谢了,嘿嘿。
zfive
2002-12-03
打赏
举报
回复
setsockopt()
[
VC
]setsockopt
设置
socket
详细用法(超时、
非阻塞
等)
本文详细介绍了
socket
选项的
设置
与优化方法,包括关闭TIME_
WAIT
、
设置
接收发送时限、缓冲区大小、连接超时、容许关闭时数据发送、以及广播特性的
设置
。同时,提供了在Linux环境下
设置
这些选项的注意事项和代码示例。
一个
VC
简单的
UDP
广播示例
本文提供了
一个
使用
VC
实现的
UDP
广播示例,包括接收端和发送端的代码。接收端通过创建线程监听特定端口,接收到广播消息后打印出来。发送端则
设置
套接字为广播类型,向网络上的广播地址发送消息。
VC
环境下
UDP
Socket
编程 depend
vc
2010
本文提供了
一个
简单的
UDP
客户端和服务端通信的示例代码,演示如何在Windows环境下使用
VC
2010进行
UDP
数据包的发送与接收。代码详细展示了初始化Winsock、创建套接字、绑定端口以及数据收发的过程。
VC
++编写的
Socket
udp
通信程序
这篇博客分享了使用
VC
++编程实现
Socket
UDP
通信的教程,适合初学者理解。
vc
udp
socket
例子
本文详细介绍了
一个
基于
UDP
协议的客户端与服务器通信的实现过程。包括初始化Winsock、创建
socket
、绑定地址、发送与接收数据等功能。通过创建线程处理收发数据,实现了客户端与服务器之间的消息交互。
网络编程
18,357
社区成员
64,165
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章