代码之家  ›  专栏  ›  技术社区  ›  Cristian Diaconescu

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

  •  3
  • Cristian Diaconescu  · 技术社区  · 14 年前

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

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

    我想知道OL’TCP套接字方法的替代品(例如库)是容易获得的,供C或C++使用。

    我没有在平台、编译器等方面做任何假设——你自己挑吧。

    我并不是要求你们实际编写程序,而是指向可以用于此目的的技术,也可能是在C/C++中使用该技术的示例或教程。

    8 回复  |  直到 14 年前
        1
  •  8
  •   Martin Beckett    14 年前

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

    main() {
       system("apache -start")
    
       system("telnet 127.0.0.1 80") 
    
    }
    

    ;-)

        3
  •  7
  •   unwind    14 年前

    我绝对会直奔最低限度 Berkeley sockets 方法。我将很有机会为各种函数获得所有正确的参数,但我认为我将非常接近所需的实际调用顺序(创建套接字、绑定、接受、读/写等)。

        4
  •  2
  •   Peter G.    14 年前

    使用tcpd,这样您就可以将服务器基于stdin/out,而不是套接字。TCPD的知识应该给采访者留下深刻印象。

        5
  •  1
  •   Cristian Diaconescu    14 年前

    有一种可能:CORBA

    这个 specs

    IDL & C mapper

    tutorial 对于C++

        6
  •  1
  •   John    14 年前

    我认为你不能完全忽视这个问题中的“面试”部分,因为这个问题太过模糊,在面试的语境之外没有用处。它也可能要求我们编写一个“多用户”程序。面试官可能希望你问更多的问题。最值得注意的是,要找出他需要什么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查找机制。

        7
  •  0
  •   Greg Domjan    14 年前

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

        8
  •  0
  •   Dr. Watson    14 年前

    如果你不害怕在文档中弄脏你的手,那么boost.asio是一个很好的库。您还可以查看ace,另一个流行的库,它将伯克利套接字封装在一个易于使用的接口中。