不是吧,,执行完就返回吧!listten(slisten,n);
while(1)
{
等待连接,开辟新的 线程;
}
closesocket(slisten);结束;
while(1)
{
等待连接,开辟新的 线程;
}
closesocket(slisten);结束;
解决方案 »
- 如何编写一个HTTP代理?
- 请问数字图像处理毕业设计开题报告怎么写啊
- 关于C++ 操作excel的两个问题
- 添加元素
- 在用vc++6.0得MFC里的 DAO 是不是不支持 access2003得数据库呀
- 如何自己写一个“窗口”菜单。。。
- 急 急 急...
- 下面代码的一些情况讨论
- VC2010中单文档读入图片,用滚动条实现图片的拖动
- 为什么changedisplaysettings函数在9x能用而在NT和2000下不好使?
- ◆→我在工具条上放了一个Slider,但如何响应 WM_HSCROLL 消息啊?
- 有没有人知道winamp的EQ调节功能,和波形显示器是怎么做的?有源代码吗?原理也行。一定给高分!!!!!
accept( ):使服务器等待来自某客户进程的实际连接,连接建立,accept()返回,得到新的数据套接字ns
所以:
listten(slisten,n);
while(1)
{
if(INVALID_SOCKET !=(socketControl=accept(...)))
开辟新的 线程;
}
closesocket(slisten);
listten(slisten,n);
while(1)
{
iaddrsize=sizeof(client);
sclient=accept(slisten,(struct sockaddr *)&client,&iaddrsize);
if(INVALID_SOCKET ==sclient)
{
break;
}
hthread=createthread(null,0,clientthread,(lpvoid)sclient,0,&dwtrreadid);
if(hthread==NULL)
{
break;
}
closehandle(hthread);
}
closesocket(slisten);大致的过程就是这个样子的!
int non_block = 1;
ioctlsocket(socket, FIONBIO, &non_block)
在非阻塞的socket上listen会直接返回,然后当有连接请求时会有一个系统事件来通知你,再调用accept就可以了。
还可以用WSASocket来创建overlapped i/o模式的socket,具体的情况你可以去看看MSDN的相关资料。
当有客户端连接时,它返回.
要不断地响应客户的连接请求就必须要:WHILE(1)LISTEN();类似的操作。但是对于UNIX下的TCP套接字也就是俗称的伯克利套接字它是这样工作:(WINSOCK和它一样)服务端过程:
SOCKET建立通讯点。
BIND将服务器IP和端口绑定到SOCKET中。
LISTEN服务器开始侦听(非阻塞)建立客户连接队列列表等
ACCEPT调用(阻塞)。当客户端有CONNECT请求时,ACCEPT结束调用并返回。要不停地阻塞以和多个客户连接就必须用WHILE(1)ACCEPT();等类似的操作。
在循环中不断地等待客户的连接请求。