这是我的情况,我有一个服务器侦听连接,并且我现在正在编程一个客户端。客户端无法从服务器接收任何内容,但它必须每3分钟发送一次状态更新。客户端到服务器连接只发送不接收
我此刻的以下内容:
WSAStartup(0x101,&ws);
sock = socket(AF_INET,SOCK_STREAM,0);
sa.sin_family = AF_INET;
sa.sin_port = htons(PORT_NET);
sa.sin_addr.s_addr = inet_addr("127.0.0.1");
connect(sock,(SOCKADDR*)&sa,sizeof(sa));
send(sock,(const char*)buffer,128,NULL);
我的方法应该如何呢?我可以避免循环recv?
如果我每次发送内容时关闭连接,并在下次需要发送内容时打开一个新连接,这样我就可以避免阻塞。听上去怎么样? – 2012-04-13 15:04:49
是的,你可以做到这一点(事实上,如果你只是推动状态更新,你可能也会如此)。问题在于服务器将在accept()上被阻塞,而不仅仅是在读取数据时。基本上你的服务器不能保证连接何时发生,因此需要不断的收听。你可以设置一个超时(两端),并依靠双方知道它们意图形成连接的时间,但这是一个容易出错的问题。编辑:但是,如果你的服务器需要做的唯一事情是进程状态更新,那么是的,这可以正常工作。 – Bhau 2012-04-13 15:22:54
好吧,我不介意服务器是否在不停地收听。我最初的问题是我在不关闭连接的情况下调用send(),并且只发送第一个状态,并且我在类似案例中阅读了这里(http://stackoverflow.com/q/8347107/777510)我需要调用recv并发送一个循环来避免这种情况,我所要求的是如果我可以通过发送和关闭连接来避免该循环。所以我应该罚款吗? – 2012-04-13 15:42:46