【发布时间】:2012-12-18 18:31:35
【问题描述】:
我正在开发我的第一个 c/c++ 应用程序并使用套接字。此应用程序连接到服务器并读取从服务器发送的图像数据,图像数据前面有一些感兴趣的整数,例如要读取多少数据。
该应用程序正在使用阻塞套接字,因为我认为在有阻塞选项直到数据可用时让我的线程持续循环不会更好。
我现在的问题是,如果服务器只是失去与网络的连接,我的应用程序就坐在那里,我无法向用户触发通知或尝试重新连接。我不知道如何检查连接状态。
有人可以就如何解决我的问题给我一些建议吗?
谢谢。我已经粘贴了我的 readImageInt() 函数,它显示了我是如何从套接字读取的。我正在使用 linux 设备进行开发。
int readImageInt()
{
int nb, i;
union {
long int whole;
char bytes[4];
} v;
memset(v.bytes, 0x00, 4);
nb = recv(imagesock, v.bytes, 4, MSG_WAITALL);
if (nb == 0||nb == -1)
{
return -1;
}
else
{
v.whole = ntohl(v.whole);
return v.whole;
}
}
【问题讨论】:
-
您是否将套接字创建为
SOCK_STREAM? -
是的,imagesock = socket(AF_INET, SOCK_STREAM, 0)
-
你怎么不用
IPPROTO_TCP?我假设它是 tcp。 -
第一个应用程序 Nick,那是个错误吗?我会做一些阅读,但它是否解决了提到的问题?
-
可能,
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)