各位老师们好,接受不到数据

aaa12213 aaa12213 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区


//////////////////////////////////////////////////////
// select.cpp文件


#include <stdio.h>


#include <winsock2.h>
#pragma comment(lib, "WS2_32") // 链接到WS2_32.lib

class InitWinSock
{
public:
InitWinSock(BYTE minorVer = 2, BYTE majorVer = 2)
{
// 初始化WS2_32.dll
WSADATA wsaData;
WORD sockVersion = MAKEWORD(minorVer, majorVer);
if(::WSAStartup(sockVersion, &wsaData) != 0)
{
exit(0);
}
}
~InitWinSock()
{
::WSACleanup();
}
};


#include <windows.h>
#include <process.h>




InitWinSock theSock;

FD_SET g_fdRead;

FD_SET g_allSet; //全集

SOCKET g_sListen;



unsigned long _stdcall ThreadFun(void*)
{
while(1)
{

g_fdRead=g_allSet;

timeval timeval;

timeval.tv_sec=0;
timeval.tv_usec=0;

int nRet = ::select(0, &g_fdRead, NULL, NULL, &timeval);

printf("%d\n",nRet);

if(nRet<=0)
{
Sleep(500);
continue;
}

//检测是否有新连接,或者有数据传输
if(FD_ISSET(g_sListen,&g_allSet))
{
SOCKET stmp=NULL;
sockaddr_in sockadd;
int nLen=sizeof(sockaddr_in);

stmp=accept(g_sListen,(sockaddr*)&sockadd,&nLen);

FD_SET(stmp,&g_allSet);

}

//可以运行到for 循环中!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


for(int i=0;i< g_fdRead.fd_count;i++)
{

if(FD_ISSET(g_fdRead.fd_array[i],&g_allSet))
{

SOCKET stmp=NULL;
sockaddr_in sockadd;
int nLen=sizeof(sockaddr_in);
char buf[200];
ZeroMemory(buf,sizeof(buf));
recv(g_fdRead.fd_array[i],buf,sizeof(buf),0);

printf("接受数据为:%s\n",buf);
}


}


Sleep(500);

} //end while


return 0;

}


int main()
{


USHORT nPort = 9585; // 此服务器监听的端口号

// 创建监听套节字
g_sListen = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(nPort);
sin.sin_addr.S_un.S_addr = INADDR_ANY;
// 绑定套节字到本地机器
if(::bind(g_sListen, (sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf(" Failed bind() \n");
return -1;
}
// 进入监听模式
::listen(g_sListen, 5);



FD_ZERO(&g_allSet);

FD_ZERO(&g_fdRead);


FD_SET(g_sListen,&g_allSet);

// HANDLE hThread=(HANDLE)_beginthreadex(NULL,0,ThreadFun,NULL,0,NULL);

HANDLE hThread=CreateThread(NULL,0,ThreadFun,0,0,NULL);

WaitForSingleObject(hThread,-1);

CloseHandle(hThread);



return 0;
}






问题代码中已经说了

for循环是可以进入的,数据就是接受的为空!


问题2:由于select是非堵塞的, 但是 select还是有些特殊,accept是可以根据其返回值来判断,

套接字是否合法。

呵呵

有的非堵塞模式,是不能根据的!!

这个是个人体会。


关键是我的第一个问题。

谁帮我解答,谢谢
...全文

相关推荐

scott例子,郝斌老师数据库sql

在郝斌老师的课程中,这些例子可能涵盖了以下SQL知识点:1. **基本查询**:如何使用SELECT语句从表中检索数据,包括选择特定列、所有列,以及使用WHERE子句过滤数据。2.

p=&田埂上的梦

【毕业设计】答 辩 技 巧 二(以一个过来人的身份,祝各位答辩 过 过 过)

阅读目录计算机专业答辩技巧指导(常见技术问题及解答)二、流程三、建议四、要注意的问题常问问题及解答(技术)(1)MVC设计模式是指什么,其优缺点,怎样用到在你的程序里?(2)SSM/SSH框架是指什么?(3)JSP与Java的关系(4)JavaScript(5)JSP和JavaScript的区别?(6)CSS是什么?(7)Servlet(8)MySQL(9)数据库事务(10)B/S架构 计算机专业答辩技巧指导(常见技术问题及解答) 本次博文接上一篇: 【毕业设计】答 辩 技 巧 一(以一个过来人的身份,祝各

追光者♂

崔巍老师数据结构

### 崔巍老师数据结构课程亮点崔巍老师的“数据结构”课程之所以备受推崇,原因在于其以下几个方面的突出表现:- **深入浅出的讲解**:崔巍老师能够将复杂难懂的数据结构概念用通俗易懂的语言解释清楚,使学生能够快速掌握核心知识点

judewen_hi

大学的学生,老师,班级的数据库

在IT领域,数据库是至关重要的组成部分,特别是在教育系统中,如"大学的学生,老师,班级的数据库"这个项目。这个数据库可能包含了管理学校信息的核心结构,涵盖了学生、教师、班级以及选修课等多个方面。

鱼儿哥不会飞

郝斌老师数据结构

#### 一、教程概述郝斌老师的《数据结构》教程是一个完整版的教学系列,旨在帮助学习者系统地理解数据结构的基本概念和原理,掌握常用的数据结构类型及其操作方法。

fanshao_oO
评论 5
收藏 已收藏
分享
返回顶部
aaa12213
C语言 70,040 成员 243,237 内容