什么是简单的C或C ++ TCP服务器和客户端示例?

时间:2009-03-19 14:02:28

标签: c++ tcp client-server

我需要快速实现一个非常小的C或C ++ TCP服务器/客户端解决方案。这只是简单地将字节数组从一台计算机传输到另一台计算机 - 不需要是可扩展的/过度复杂的。越简单越好。如果可以的话,快速而又脏。

我尝试使用本教程中的代码,但我无法在Linux中使用g ++进行构建:http://www.linuxhowtos.org/C_C++/socket.htm

如果可能的话,我想避免使用第三方库,因为我运行此系统的系统非常受限制。这必须是C或C ++,因为现有的应用程序已经实现。

感谢 emg-2 的回答,我设法使用以下步骤使上述代码示例与C ++兼容:

将这些标题添加到客户端和服务器:

#include <cstdlib>
#include <cstring>
#include <unistd.h>

server.c中,将clilen的类型更改为socklen_t。

int sockfd, newsockfd, portno/*, clilen*/;
socklen_t clilen;

client.c中,更改以下行:

if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0) { ... }

要:

if (connect(sockfd,(const sockaddr*)&serv_addr,sizeof(serv_addr)) < 0)

5 个答案:

答案 0 :(得分:41)

我过去曾使用Beej's Guide to Network Programming。它是C语言,而不是C ++,但这些例子很好。直接转到section 6以获取简单的客户端和服务器示例程序。

答案 1 :(得分:13)

如果代码应该简单,那么你可能会要求基于传统BSD套接字的C示例。像boost::asio这样的解决方案在简短的“hello world”示例中非常复杂。

要编译您提到的示例,您必须进行简单的修复,因为您正在C ++编译器下进行编译。我指的是以下文件:
http://www.linuxhowtos.org/data/6/server.c
http://www.linuxhowtos.org/data/6/client.c
来自:http://www.linuxhowtos.org/C_C++/socket.htm

  1. 在两个文件中添加以下内容:

    #include <cstdlib>
    #include <cstring>
    #include <unistd.h>
    
  2. client.c中,更改行:

    if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0)
    { ... }
    

    为:

    if (connect(sockfd,(const sockaddr*)&serv_addr,sizeof(serv_addr)) < 0)
    { ... }
    
  3. 正如您在C ++中看到的那样,需要进行显式转换。

答案 2 :(得分:6)

尝试boost :: asio lib(http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio.html)它有很多例子。

答案 3 :(得分:1)

虽然很多年前,clsocket似乎是一个非常好的小型跨平台(Windows,Linux,Mac OSX):https://github.com/DFHack/clsocket

答案 4 :(得分:0)

以下是一些示例:

1)简单
2)叉子 3)线程

基于服务器:

http://www.martinbroadhurst.com/server-examples.html