对于socket的一些问题。关于accept函数(SOCKET s,……),本函数从s额等待队列中抽取一个连接,创建一个与s同类的的新的套接口并返回句柄,如果队列中无等待连接,且讨接口为非阻塞方式,即accept()阻塞调用进程直至新的连接出现。如果套接口为非阻塞方式且队列中等待连接,则accept()返回一错误码,已接受连接的套接口不能用于接受新的连接,原始讨接口保持开放。
问题:对于accept函数是否将其设置为非阻塞和阻塞都一样的,对于上面说的“如果套接口为非阻塞方式且队列中等待连接,则accept()返回一错误码,已接受连接的套接口不能用于接受新的连接,原始讨接口保持开放。”,那么是否是因为已经接受连接的套接口没有释放连接的原因,这种情况应该如果解决(不采用创建线程的方法)。如果讨接口为阻塞方式,那么当有一个套接口连接后,那么其它在队列中的等待接受的套接字会在什么时候被接受?
比如如下代码
{
SOCKET S,S1;
……
while(1)
{
s1=accept(s,……);
recv(s1,……);
send(s1,……)
}
closesocket(s1);
closesocket(s);
}
上面的情况是否无论如何只能接受一个套接字啊,如果将closesocket(s1)放在while循环之后,那么该代码可以接受多个套接字并且接受和发送数据,但是如果客户端没有发送数据,而此时有新的socket要进行连接那么此时是否会出现一个错误啊?
如果一个服务器和多个客户端进行聊天程序即当一个客户端和服务器建立一条连接之后就进入聊天模式,服务器端并不知道要处理多少个客户的情况下,怎么处理客户端来连接的套接字,总不会用套接字数组吧,还有如何让服务器端选择多个连接的客户端的一个来进行聊天啊?
问题:对于accept函数是否将其设置为非阻塞和阻塞都一样的,对于上面说的“如果套接口为非阻塞方式且队列中等待连接,则accept()返回一错误码,已接受连接的套接口不能用于接受新的连接,原始讨接口保持开放。”,那么是否是因为已经接受连接的套接口没有释放连接的原因,这种情况应该如果解决(不采用创建线程的方法)。如果讨接口为阻塞方式,那么当有一个套接口连接后,那么其它在队列中的等待接受的套接字会在什么时候被接受?
比如如下代码
{
SOCKET S,S1;
……
while(1)
{
s1=accept(s,……);
recv(s1,……);
send(s1,……)
}
closesocket(s1);
closesocket(s);
}
上面的情况是否无论如何只能接受一个套接字啊,如果将closesocket(s1)放在while循环之后,那么该代码可以接受多个套接字并且接受和发送数据,但是如果客户端没有发送数据,而此时有新的socket要进行连接那么此时是否会出现一个错误啊?
如果一个服务器和多个客户端进行聊天程序即当一个客户端和服务器建立一条连接之后就进入聊天模式,服务器端并不知道要处理多少个客户的情况下,怎么处理客户端来连接的套接字,总不会用套接字数组吧,还有如何让服务器端选择多个连接的客户端的一个来进行聊天啊?
解决方案 »
- 在对话框程序中,去建一个全局线程方法
- COM智能指针问题
- WSAAsyncselect FD_WRITE
- 请有用过《知网》2000 能不能提供一份API书说给我,谢谢了!
- VC6.0的安装问题,2003卸载后想装6.0,出现版本冲突,不想重装系统,怎样解决?
- 发现DX9开发包中的一些问题
- 用Win32SDK并发线程的问题。。。。。。。。
- 如何当鼠标移到一个按钮上时,在按钮上画一个图标?
- 哪位大侠知道语音合成方面的知识
- 50分求助,如何用画一组同心圆环?
- 一个好老的问题,也是很多网络爱好者遇到的问题:windows api socket 的connect
- 如何用编程序的方法改变显示器的分辨率和色彩位数等参数?(不用directX)
while(1)
{
//新建套接字给s1
s1=accept(s,……);
recv(s1,……);
send(s1,……)
}
就可以接受多个套接字;(3)如果讨接口为阻塞方式,那么当有一个套接口连接后,那么其它在队列中的等待接受的套接字会在什么时候被接受?
答复:会自动接受
对于3点,下面这样的代码也可以吗?
socket s1;
while(1)
{
s1=accept(s,……);
recv(s1,……);
send(s1,……)
}
如果是这样可以,那么它会覆盖已经接受的那个连接吗,还是提示会出错??
我觉得下面的是可以的,对吗?
while(1)
{
socket *s1=new socket
s1=accept(s,……);
recv(s1,……);
send(s1,……)
}