linux 中 C++ 中的 UDP Socket 编程

Posted

技术标签:

【中文标题】linux 中 C++ 中的 UDP Socket 编程【英文标题】:UDP Socket programming in C++ in linux 【发布时间】:2011-06-21 20:10:53 【问题描述】:

我对套接字编程和 c++ 中的初学者-中级完全陌生。 我用 c++ 编写了一个代码,还用 java 编写了另一个应用程序。 java 程序将从 c++ 代码中获取数据,该代码在几秒钟内生成数据。我正在尝试使用套接字编程在这两者之间传输数据。我在这里找到了一些代码:Socket programming tutorial。我正在使用它的UDP java客户端。但是,对于 UDP 服务器,它只有 C 代码。我需要将此代码嵌入到我的 C++ 应用程序中。因此我需要它的 c++ 版本。谁能帮我这个?或给我一个链接,提供有关它的教程。反正C代码是:udpserver.c

【问题讨论】:

你应该能够(几乎)逐字接受......到目前为止你尝试过做什么? @Chris: 编译时出现此错误:udpserver.c: In function 'int main()': udpserver.c:48:64: error: invalid conversion from 'int*' to ' socklen_t*' udpserver.c:48:64: 错误:初始化'ssize_t recvfrom(int, void*, size_t, int, sockaddr*, socklen_t*)'的参数6 【参考方案1】:

您必须将 addr_len 声明为 socklen_t,而不是 int。


也就是说,main 中的前几行应该是这样的:

int sock;
int bytes_read; // <- note how this is now on its own line!
socklen_t addr_len; // <- and this too, with a different type.
char recv_data[1024];

... 其他一切保持原样。

【讨论】:

我是初学者...我这样做了,我得到了这个错误:udpserver.c:19:9: error: expected '=', ',', ';', 'asm ' or 'attribute' before 'char' udpserver.c:41:9: error: 'addr_len' undeclared (first use in this function) udpserver.c:41:9: note: each undeclared identifier每个函数只报告一次

以上是关于linux 中 C++ 中的 UDP Socket 编程的主要内容,如果未能解决你的问题,请参考以下文章

C++ UDP Socket端口复用

C++基于TCP和UDP的socket通信

linux系统socket通信编程2

UDP C++接收

手把手写C++服务器(22):Linux socket网络编程进阶第一弹

手把手写C++服务器(22):Linux socket网络编程进阶第一弹