服务器socket select问题

问题描述

FD_ZERO(&readfds);FD_SET(ListenSocket,&readfds);time.tv_sec=2;hNoClients=InitalClientCount();while(1){dwRet=select(ListenSocket+1,&readfds,NULL,NULL,&time);if(dwRet<0){FD_ZERO(&readfds);continue;}elseif(dwRet==0){time.tv_sec=2;FD_ZERO(&readfds);FD_SET(ListenSocket,&readfds);printf("nodataonsocket");continue;}else{if(FD_ISSET(ListenSocket,&readfds)){while(gwClientCount<MAXCONNECTION){nLen=sizeof(SOCKADDR_IN);socketclient=accept(ListenSocket,(LPSOCKADDR)&SockAddr,&nLen);if(socketclient==INVALID_SOCKET){break;}lpClientReq=(structClientRequestInfo*)malloc(sizeof(ClientRequestInfo));memset(lpClientReq,0,sizeof(structClientRequestInfo));lpClientReq->ClientSocket=socketclient;lpClientReq->dwConnecttime=GetTickCount();lpClientReq->dwRecv=0;lpClientReq->dwSend=0;lpClientReq->nMethod=0;p=szWebRoot;//lpClientReq->szFilename={"c:webpages"};//charp[256]={0};strcat(lpClientReq->szFilename,p);hClientThread=CreateThread(NULL,NULL,&ClientThread,(LPVOID)lpClientReq,NULL,&dwThreadId);printf("saan");}}}}上面是我的服务器端select和accept,我是用线程实现的,这个服务器器端程序,我用internetexplorer连接自己写的服务器的时候,很奇怪,按刷新按钮select可以检测到数据,但是用回车按钮就不可以。(第一次连接除外),我真的不知道是什么原因,还有就是internetexplorer不能把服务器的数据打开,我在自己代码里那send()检测时数据是已经都发送出去了,是不是我的响应头不正确呢?请高人指点一下,万分感谢,高分感谢。有人能帮我全部解决,银行卡汇钱都可以~~~!!

解决方案

解决方案二:
你说的回车是怎么操作的?
解决方案三:
就是在输入URL后按下回车啊,不包括第一次输入(第一次输入时可以),在同一URL后输入回车不响应,按常理来说,回车键是从新连接,应该能够select到数据的,可以却没有
解决方案四:
在每次select之后都需要FD_ZERO这个把句柄清0的.

时间: 2024-09-17 01:41:21

服务器socket select问题的相关文章

Lua 服务器Socket通信实例(转)

  local socket = require"socket" local host = "127.0.0.1"local port = "843"local sever = assert(socket.bind(host, port)) --绑定sever:settimeout(nil)   --不设置阻塞local tab = {}table.insert(tab, sever) while 1 do  local s  s,_,_ = s

服务器-socket客户端发送消息问题

问题描述 socket客户端发送消息问题 现在需求是两个客户端和一个服务端,一个客户端向服务端发送消息,然后服务端再将消息发送给第二个客户端,都是长连接,第一次发送没问题,但是再点发送第二个客户端就收不到消息了,服务器也收不到(下面服务端代码) 解决方案 通过这个来看的话,你的服务端实际上也就是相当于一个网关的效果,用来转发消息的,这种情况下,如果你服务端都没收到消息的话,你可以自己调试看看是否两者之间的连接已经断开 或者说两者之间的数据包解包不正确导致没处理你的流程. 解决方案二: java

服务器socket接受多个客户端的连接以及接收数据的问题

问题描述 我现在的问题是,我服务器是C#写的socket监听,现在有多个客户端连接上来,服务器接受数据接收不到,(前面几次接收是正常的)代码如下:(1)服务器端publicstaticvoidsocketListener(){//服务器IP地址IPAddressip=IPAddress.Parse("10.0.1.81");//IPAddressip=IPAddress.Parse("10.0.1.80");SocketserverSocket=newSocket(

服务器-socket通讯方面的问题

问题描述 socket通讯方面的问题 Android用socket实现仿QQ功能时,必须要有文件服务器么?服务器用多个端口监听不行么? 还有socket只能同时发送一条信息么?可不可以用线程同时发送多条? 求好心人解决我的疑惑,谢谢 解决方案 java socket通讯乱码问题的解决flex的Socket通讯沙箱和安全策略问题Socket 通讯 接受到多条命令混合到一块问题 解决方案二: tcp是双工的,你只要持有那个socket对象,你可以用线程往这个socket里写东西,一个服务器一般都是监

有什么好的方法让服务器socket监听数据更新呢

问题描述 服务端:packageSocketTest;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.ServerSocket;importjava.net.Socket;publicclassServer{publicstaticvoidmain(String[]args){ServerS

如何用PHP实现Socket服务器

想要构建聊天应用,或者甚至是游戏吗?那么,socket服务器将成为你迈出的第一步.一旦你了解了创建服务器的基本功能,那么后续的优化步骤就会变得同样简单. socket服务器的工作方式是这样的,不间断地运行以等待客户端的连接.一旦客户端连接上了,服务器就会将它添加到客户名单中,然后开始等待来自客户端的消息. 不要走开,下面是完整的源代码: // Set time limit to indefinite execution  set_time_limit (0);    // Set the ip 

linux网络编程之socket(十二) select函数的并发限制和poll函数应用举例

一.用select实现的并发服务器,能达到的并发数,受两方面限制 1.一个进程能打开的最大文件描述符限制. 这可以通过调整内核参数.可以通过ulimit -n来调整或者使用setrlimit函数设置, 但一个系统所能打开的最大数也是有 限的,跟内存大小有关,可以通过cat /proc/sys/fs/file-max 查看 2.select中的fd_set集合容量的限制 (FD_SETSIZE,一般为1024) ,这需要重新编译内核. 可以写个测试程序,只建立连接,看看最多能够建立多少个 连接,客

Android客户端与PC服务器如何实现Socket通信

本文介绍Android终端持续扫描AP信息并发送给服务器端的实现.首先基于TCP协议在Android终端和PC两端之间形成网络虚拟链路.使用ServerSocket创建TCP服务器端,然后在Android客户端使用Socket的构造器来连接服务器.其中Android终端通过WIFI连接和PC处于同一局域网. 1. PC服务器启用ServerSocket 两个通信实体在建立虚拟链路之前,需要有一方先准备好,主动接受来自其他通信实体的连接请求. 使用ServerSocket对象监听来自客户端的Soc

用Java Socket开发支持上千个并发的小型服务器(下)

总结一下客户机 我们的类研究完了.在我们继续往前讨论服务器端的情况之前,让我们回顾一下创建和使用Socket的步骤: 1.用您想连接的机器的IP地址和端口实例化Socket(如有问题则抛出Exception). 2.获取Socket上的流以进行读写. 3.把流包装进BufferedReader/PrintWriter的实例,如果这样做能使事情更简单的话. 4.对Socket进行读写. 5.关闭打开的流. 5创建服务器Socket 创建RemoteFileServer类 1.import java