我需要快速实现一个非常小的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)
答案 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
在两个文件中添加以下内容:
#include <cstdlib>
#include <cstring>
#include <unistd.h>
在client.c中,更改行:
if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0)
{ ... }
为:
if (connect(sockfd,(const sockaddr*)&serv_addr,sizeof(serv_addr)) < 0)
{ ... }
正如您在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)