当前位置: 技术问答>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楼正解
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。