C语言中非常简单的服务器

C语言中非常简单的服务器,c,client-server,C,Client Server,作为其中一个助手,我们必须用C语言和一些客户端实现非常简单的服务器。其思想是,使用SystemV IPC队列,我们创建一个客户机注册的队列,然后为每个客户机创建一个包含消息的队列。我想了解一下服务器部分。我应该吃这样的东西吗: while(1) { //some queue using code sleep(100); } 所以,对于每个时间间隔,我检查每个队列并执行我必须执行的操作,或者我应该使用信号通知服务器至少一个队列已准备好进行管理 在普通服务器中是如何完成的,他们是否有一段时

作为其中一个助手,我们必须用C语言和一些客户端实现非常简单的服务器。其思想是,使用SystemV IPC队列,我们创建一个客户机注册的队列,然后为每个客户机创建一个包含消息的队列。我想了解一下服务器部分。我应该吃这样的东西吗:

while(1)
{
  //some queue using code
  sleep(100);
}
所以,对于每个时间间隔,我检查每个队列并执行我必须执行的操作,或者我应该使用信号通知服务器至少一个队列已准备好进行管理


在普通服务器中是如何完成的,他们是否有一段时间间隔来检查需要执行的所有操作,或者有更合适的方法来执行此操作?

您必须按照以下步骤执行操作:

这是一个非常基本的答案,需要定义和原型到位,但这应该给你一个基本的选择,例如

这段代码可以在freebsd、ubuntu和我的windows计算机上运行(如果你有正确的头文件),它也被缩小了,一些定义被删除了,就像套接字描述符def一样糟糕,因为它们几乎就是这样

struct timeval timeout;
int rc
fd_set wfdset,rfdset,errfdset;
//Do some checks put them in either read fdset or write fdset or error fdset 
FD_SET (socket_sd, &rfdset);
timeout.tv_sec = 0;
timeout.tv_usec = 250 * 1000;
rc = select (maxfds + 1, &rfdset, &wfdset, NULL, &timeout);
//loop through the sockets and read from them at this point.

Select对于Win32和UNIX都是可移植的,但如果您在UNIX IE:FreeBSD中对套接字进行任何繁重的操作,则不推荐使用它。如果您需要深入了解并更好地管理套接字,请使用kqueue或epoll等工具。

C中典型的网络代码通常使用类似的工具完成,这是基于事件的。这里有一个非常好的指南(至少在我使用它的时候):select()函数是否与System V队列的id一起工作?我不确定这一点(我大概有7年没有接触过System V的内容),但我上面链接的指南的一部分也讨论了System V队列的使用:尽管我认为在您的情况下,您要做的是让客户端连接并在其套接字/描述符上进行选择,并为其管理队列(而不是在队列上执行
select()
-ing)。@Andna:
select()、poll()和epoll()
仅在linux上处理队列。这不可移植到任何其他UNIX系统。好的,谢谢你的快速回答。