关于 socket阻塞的问题,大哥们啊,求求你们了啊

cjjyyf cjjyyf 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我建的socket是阻塞的,当服务端没有返信时,我的程序就停在recv不动了,然后我设置了
int TimeOut=6000;//设置接收超时6秒
if(::setsockopt(sockClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
{
return
} ;
过6秒后就跳过了recv语句了,请问setsockopt()函数就是这样当recv卡在那里的时候,超过时间退出的吗?
因为我用的recv,是用while()循环接收的,要真的跳出循环还要设置一个时间开关,到时间就跳出循环吗?以下代码请过目
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}

if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return;
}
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
int TimeOut=6000;//设置接收超时6秒
if(::setsockopt(sockClient,SOL_SOCKET,SO_RCVTIMEO,(char&TimeOut,sizeof (TimeOut))==SOCKET_ERROR){
return ;
}
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
char sentBuf[20]="54156231";
send(sockClient, sentBuf,strlen(sentBuf)+1,0);
DWORD dwBegin = ::GetTickCount();
DWORD dwNow = dwBegin;
const dwMaxTime = 6000; //最大超时,单位为毫秒
while(dwNow-dwBegin<dwMaxTime)
{

char recvBuf[100];
memset( recvBuf, 0x00, sizeof(recvBuf));
int ret;
ret=recv(sockClient,recvBuf,100,0);

dwNow = ::GetTickCount();
Sleep(1);
}
closesocket(sockClient);
WSACleanup();

}
...全文

相关推荐

select在Socket编程中的多路复用应用实例

select虽然老迈,但它教会了我们一件事:不要让 I/O 成为系统的瓶颈。正是有了select的铺垫,才催生了pollepollkqueue等更先进的机制。它们的本质思想没变,只是做得更快、更高效、更可扩展。所以,下次当你看到某段代码还在用select,不要急着嘲笑,而是要学会欣赏它的简洁之美,同时思考:如果是我,我会怎么优化?毕竟,真正的高手,既懂得尊重历史,也敢于拥抱未来。✨🎉Bonus 时间:想要完整源码?想自己跑一把压力测试?

阿卞是宝藏啊

基于TCP Socket的跨平台文件传输系统设计与实现

要想两边通力合作,首先得说同一种“语言”。我们设计一个简单的结构体作为每个数据块的头部:// 魔数:0xABCDEF01,防误解析// 分块序号// 文件偏移// 当前块大小// 总块数(首块提供)// 文件名(仅首块)// 数据校验有了这个协议头,接收方就能知道:- 这是不是我的数据?- 应该写到文件哪个位置?- 是否需要重新请求某一块?发送时先发头,再发数据;接收时先读头,再根据chunk_size读指定长度的数据。

高杉峻

网络存储技术应用项目教程(微课视频版)教学大纲+课程标准+PPT课件+教案+习题

网络存储技术应用项目教程(微课视频版)教学大纲+课程标准+PPT课件+教案+习题

qq_38220914

人工智能应用的数学基础(微课版)教学大纲+PPT课件

人工智能应用的数学基础(微课版)教学大纲+PPT课件

Bryan Ding

【ACDC微电网的能源管理策略】微电网仿真模型包括光伏发电机、燃料电池系统、超级电容器和直流侧的电池,包括电压源变换器(VSC),用于将微电网的直流侧与交流侧相连接Simulink仿真实现

内容概要:本文围绕ACDC微电网的能源管理策略,构建了一个包含光伏发电机、燃料电池系统、超级电容器和直流侧电池的微电网仿真模型,并通过电压源变换器(VSC)实现直流侧与交流侧的连接,采用Simulink进行系统级建模与仿真。该模型充分整合多种分布式能源与储能单元,重点研究在复杂工况下能量的协调控制与优化分配策略,旨在提升微电网运行的稳定性、能效性与可再生能源利用率。仿真平台能够有效验证控制算法在动态负载与电源波动下的响应性能。; 适合人群:具备电力系统、新能源或自动化相关背景,熟悉Simulink仿真工具,从事微电网、分布式能源系统研究或工程应用的研发人员及高年级研究生。; 使用场景及目标:①用于研究多源微电网的能量管理与协调控制策略;②验证VSC在交直流混联系统中的功率调节与接口控制性能;③为新能源系统集成、储能优化配置及智能电网控制提供仿真基础与技术参考。; 阅读建议:建议结合Simulink模型文件同步操作,重点关注各单元的数学建模、控制逻辑设计及系统整体的动态响应特性,可进一步在此基础上拓展故障分析、经济调度或加入更复杂的控制算法如模型预测控制(MPC)进行深化研究。

荔枝科研社
评论
收藏 已收藏
分享
返回顶部
cjjyyf
VC/MFC 16,550 成员 421,606 内容