各位老师们好,接受不到数据
//////////////////////////////////////////////////////
// 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.
【毕业设计】答 辩 技 巧 二(以一个过来人的身份,祝各位答辩 过 过 过)
阅读目录计算机专业答辩技巧指导(常见技术问题及解答)二、流程三、建议四、要注意的问题常问问题及解答(技术)(1)MVC设计模式是指什么,其优缺点,怎样用到在你的程序里?(2)SSM/SSH框架是指什么?(3)JSP与Java的关系(4)JavaScript(5)JSP和JavaScript的区别?(6)CSS是什么?(7)Servlet(8)MySQL(9)数据库事务(10)B/S架构 计算机专业答辩技巧指导(常见技术问题及解答) 本次博文接上一篇: 【毕业设计】答 辩 技 巧 一(以一个过来人的身份,祝各
崔巍老师数据结构
### 崔巍老师数据结构课程亮点崔巍老师的“数据结构”课程之所以备受推崇,原因在于其以下几个方面的突出表现:- **深入浅出的讲解**:崔巍老师能够将复杂难懂的数据结构概念用通俗易懂的语言解释清楚,使学生能够快速掌握核心知识点
大学的学生,老师,班级的数据库
在IT领域,数据库是至关重要的组成部分,特别是在教育系统中,如"大学的学生,老师,班级的数据库"这个项目。这个数据库可能包含了管理学校信息的核心结构,涵盖了学生、教师、班级以及选修课等多个方面。
郝斌老师数据结构
#### 一、教程概述郝斌老师的《数据结构》教程是一个完整版的教学系列,旨在帮助学习者系统地理解数据结构的基本概念和原理,掌握常用的数据结构类型及其操作方法。


