C++ 用C写一个客户机-服务器程序。。。在一张纸上

C++ 用C写一个客户机-服务器程序。。。在一张纸上,c++,c,client-server,C++,C,Client Server,这是一个真实的面试问题。欧欧欧 让我们把在面试中问这样一个问题放在一边 我想知道OL的TCP套接字方法有哪些替代方法(例如库),可以在C或C++中使用。p> 我对平台、编译器等不做任何假设,请随意选择 我并不是要求你们实际编写程序,只是要指出可能用于此目的的技术,可能是在C/C++中使用该技术的示例或教程中。这里有一种可能性:CORBA IDL->C 对于C++来说,Boost怎么样 我会完全选择最短直线进近。我很难为各种函数获得所有正确的参数,但我认为我将非常接近所需的实际调用顺序(创建套接

这是一个真实的面试问题。欧欧欧

让我们把在面试中问这样一个问题放在一边

我想知道OL的TCP套接字方法有哪些替代方法(例如库),可以在C或C++中使用。p> 我对平台、编译器等不做任何假设,请随意选择


我并不是要求你们实际编写程序,只是要指出可能用于此目的的技术,可能是在C/C++中使用该技术的示例或教程中。这里有一种可能性:CORBA

IDL->C


对于C++来说,Boost怎么样

我会完全选择最短直线进近。我很难为各种函数获得所有正确的参数,但我认为我将非常接近所需的实际调用顺序(创建套接字、绑定、接受、读/写等)

我在平台上没有做任何假设, 编译器等-你挑吧


;-)

使用tcpd,以便服务器可以基于stdin/out而不是sockets。tcpd的知识应该给面试官留下深刻印象。:-)

DCOM和命名管道也可以是选项

如果你不怕在文档中弄脏你的手,那么Boost.ASIO是一个很棒的库。你也可以看看ACE,这是另一个流行的库,它将Berkeley套接字封装在一个易于使用的界面中。

我认为你不能完全忽略这个问题的“面试”部分,因为这个问题太模糊了,在面试之外是没有用的。它可能要求我们编写一个“多用户”程序。面试官可能希望你问更多的问题。最值得注意的是,了解他需要什么样的IPC机制,以及协议的要点是什么(即,他们是如何通信的,以及他们是如何通信的?)

如果没有这些信息,您只需要假设最常见的:TCP/IP套接字,服务器在其中侦听,客户机启动连接,通信只是客户机请求,然后是服务器响应。在这种情况下,你可以在纸上写下

// server
s = socket();
listen (s);
bind (s, addr_port);
while ((c = accept (s)) != -1)
    spawn_thread_or_proc (handle_connection, c);


// client
s = socket();
connect (s, addr_port); 
...

证明你知道基本的电话。如果需要更多详细信息,则可以充实参数、返回值、错误处理、读/写调用、线程/进程机制、选择/轮询机制、dns查找机制

不管是谁否决了这一点,我很好奇,这个答案有什么问题吗?@我附议。我认为答案很好+有些人就是不喜欢他们不能理解的东西。我给它一个+1.+1。作为一个教程,不要看太远。比吉的指南很棒!如果您知道如何使用Berkeley套接字,那么其余的库和API就更有意义了。我还怀疑,大多数雇主都希望看到您了解这些核心概念,尤其是对于C/C++程序员。但可能不是……客户机-服务器体系结构并不一定意味着必须涉及TCP套接字。像echo input back这样带有hello前缀的简单程序可以是server.LOL,那么
main(){int-server;int-client=1;server=client;}
实际上驻留在某个内存地址的客户端正在与驻留在不同地址的服务器通信,并向其发送值1;)
// server
s = socket();
listen (s);
bind (s, addr_port);
while ((c = accept (s)) != -1)
    spawn_thread_or_proc (handle_connection, c);


// client
s = socket();
connect (s, addr_port); 
...