当前位置: 技术问答>linux和unix
select 处理客户端的问题
来源: 互联网 发布时间:2016-07-01
本文导语: 客户端程序,用select处理 Sock1 接受从服务器传送的消息 Sock2=0 接受从标准输入的消息 首先sock1连接服务器 然后把sock1和sock2都放到select里面 While(1) { Select(); If(sock1可读) { } If(sock2可读) { } } 这样会发现一旦程序...
客户端程序,用select处理
Sock1 接受从服务器传送的消息
Sock2=0 接受从标准输入的消息
首先sock1连接服务器
然后把sock1和sock2都放到select里面
While(1)
{
Select();
If(sock1可读)
{
}
If(sock2可读)
{
}
}
这样会发现一旦程序运行,在sock1处死循环,并从中读取的内容是0字节。
是因为sock1与服务器连接,所以一直判读为有读取内容,这个怎么处理?让它只有在服务器那边确实发送东西过来再响应。谢谢
Sock1 接受从服务器传送的消息
Sock2=0 接受从标准输入的消息
首先sock1连接服务器
然后把sock1和sock2都放到select里面
While(1)
{
Select();
If(sock1可读)
{
}
If(sock2可读)
{
}
}
这样会发现一旦程序运行,在sock1处死循环,并从中读取的内容是0字节。
是因为sock1与服务器连接,所以一直判读为有读取内容,这个怎么处理?让它只有在服务器那边确实发送东西过来再响应。谢谢
|
就算是TCP连接着,对端没有切实的发送数据你的select也不会检测到数据可读。每次循环过后你需要重置FD_ZERO, FD_SET,以及超时时间。
|
While(1)
{
FD_ZERO
FD_SET
Select();
If(sock1可读)
{
}
If(sock2可读)
{
}
}
{
FD_ZERO
FD_SET
Select();
If(sock1可读)
{
}
If(sock2可读)
{
}
}
|
如果读取的内容是0字节,表明客户端已经断开连接了,服务器应该收回这个资源了。
|
1楼正解