社区
C++ 语言
帖子详情
linux下用C++写UDP通信程序该怎么写?
kunp
2004-06-23 10:08:17
找了一些代码,都是C的,用gcc编译是没有问题,但用g++编译报错,linux下用C++怎么写UDP、TCP的通信程序?好像C++的标准库并不带网络类,要直接调用系统的C库,不知道该怎么做咧?
...全文
289
6
打赏
收藏
linux下用C++写UDP通信程序该怎么写?
找了一些代码,都是C的,用gcc编译是没有问题,但用g++编译报错,linux下用C++怎么写UDP、TCP的通信程序?好像C++的标准库并不带网络类,要直接调用系统的C库,不知道该怎么做咧?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
darkstar21cn
2004-06-23
打赏
举报
回复
用ACE,它提供了很完善的一套构架。
#include "ace/SOCK_Dgram_Mcast.h"
#include "ace/INET_Addr.h"
#include "ace/OS.h"
#include "ace/ACE.h"
#include "ace/Log_Msg.h"
int ACE_TMAIN (int argc, char* argv[])
{
ACE_Time_Value ti = ACE_Time_Value (0, 20000);
ACE_INET_Addr local_addr ((u_short) 9000);
ACE_INET_Addr recv_addr ;
ACE_SOCK_Dgram recv_dgram;
//打开端口
if (recv_dgram.open (local_addr) == -1) {
ACE_DEBUG ((LM_ERROR, "%p\n", "Recieving data gram open"));
ACE_OS::exit (-1);
}
ACE_Time_Value t = ACE_Time_Value::zero;
while (1) {
//recieve data gram
char buf[2048];
//接收UDP数据,
ssize_t recv = recv_dgram.recv (buf, 2048, recv_addr);
//显示接收了多少数据,以及数据的来源
ACE_DEBUG ((LM_DEBUG, "%M [%t %N:%l] %s:%d recieved %d\n", recv_addr.get_host_addr (), recv_addr.get_port_number (), recv));
if (recv <= 0) {
ACE_DEBUG ((LM_DEBUG, "%M [%t %N:%l] Can't recieve any data gram from the port (%s:%d)\n", recv_addr.get_host_addr (),recv_addr.get_port_number ()));
ACE_OS::sleep (ti);
continue;
}
}
return 0;
}
是否比你的简短一些?
kunp
2004-06-23
打赏
举报
回复
没找到linux下socket库的信息啊,兄弟们,谁能说说如何用C++调用C的库也好
archim
2004-06-23
打赏
举报
回复
//程序名:server.c
//功能:服务器从客户机读入一个字符,并将排在此字符后面的字符回送客户机
//服务器端口:9000
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
int pid;//用于存放fork()执行结果
int server_sockfd,client_sockfd;//用于服务器和客户机套接口描述符
int bind_flag,listen_flag;//用于存放bind()和listen()执行结果
int server_address_length,client_address_length;//作为服务器客户机地址长变量
struct sockaddr_in server_address;//作为服务器地址结构变量(含地址和端口)
struct sockaddr_in client_address;//作为客户机地址结构变量(含地址和端口)
if((pid=fork())!=0) //用fork()产生新进程
exit(0) ;
setsid() ; //以子进程开始下面的程序
server_sockfd=socket(AF_INET,SOCK_STREAM,0);
if(server_sockfd<0)
{
printf("socket error \n");
exit(1);
}
server_address.sin_family=AF_INET;
server_address.sin_addr.s_addr=htonl(INADDR_ANY);
server_address.sin_port=htons(9000);
server_address_length=sizeof(server_address);
bind_flag=bind(server_sockfd, (struct sockaddr *)&server_address, server_address_length);
if(bind_flag<0)
{
printf("bind error \n");
exit(1);
}
listen_flag=listen(server_sockfd,5);
if(listen_flag<0)
{
printf("listen error \n");
exit(1);
}
while(1)
{
char ch;
client_sockfd=accept(server_sockfd, (struct sockaddr *)&client_address, (socklen_t *)&client_address_length);
read(client_sockfd,&ch,1);
printf("cli_ch=%c",ch);
ch++;
write(client_sockfd,&ch,1);
close(client_sockfd);
}
}
================================================================
BINGO!!
qwertasdfg123
2004-06-23
打赏
举报
回复
ACE库
archim
2004-06-23
打赏
举报
回复
用socket函数库
在linux和在windows下是一样的
kunp
2004-06-23
打赏
举报
回复
现在有这样的服务器源码:
------------------------------------
//程序名:server.c
//功能:服务器从客户机读入一个字符,并将排在此字符后面的字符回送客户机
//服务器端口:9000
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main()
{
int pid;//用于存放fork()执行结果
int server_sockfd,client_sockfd;//用于服务器和客户机套接口描述符
int bind_flag,listen_flag;//用于存放bind()和listen()执行结果
int server_address_length,client_address_length;//作为服务器客户机地址长变量
struct sockaddr_in server_address;//作为服务器地址结构变量(含地址和端口)
struct sockaddr_in client_address;//作为客户机地址结构变量(含地址和端口)
if((pid=fork())!=0) //用fork()产生新进程
exit(0) ;
setsid() ; //以子进程开始下面的程序
server_sockfd=socket(AF_INET,SOCK_STREAM,0);
if(server_sockfd<0)
{
printf("socket error \n");
exit(1);
}
server_address.sin_family=AF_INET;
server_address.sin_addr.s_addr=htonl(INADDR_ANY);
server_address.sin_port=htons(9000);
server_address_length=sizeof(server_address);
bind_flag=bind(server_sockfd, (struct sockaddr *)&server_address, server_address_length);
if(bind_flag<0)
{
printf("bind error \n");
exit(1);
}
listen_flag=listen(server_sockfd,5);
if(listen_flag<0)
{
printf("listen error \n");
exit(1);
}
while(1)
{
char ch;
client_sockfd=accept(server_sockfd, (struct sockaddr *)&client_address, &client_address_length);
read(client_sockfd,&ch,1);
printf("cli_ch=%c",ch);
ch++;
write(client_sockfd,&ch,1);
close(client_sockfd);
}
}
----------------------------------
如何给它改成c++代码呢?
linux
多线程+
UDP
网络
通信
(总结+
程序
)
linux
系统下建立多线程
程序
设计,完成
UDP
网络
通信
的发送与接收,包括总结与源代码,实测效果可见链接https://blog.csdn.net/zxp121127/article/details/78506081
linux
ipv6简单tcp/
udp
socket
通信
linux
下ipv6简单的tcp/
udp
socket
通信
,代码测试通过,具体可以参考: http://blog.csdn.net/zhengxianghdu/article/details/14106167
《C语言/
C++
学习指南》
Linux
开发篇
在内容编排上,先介绍
Linux
的安装、基本使用和配置,然后再开始介绍在
Linux
下的C/
C++
开发技术: gcc命令行、Makefile、gdb调试方法、动态库与静态库、pthread线程、进程、进程间
通信
、系统调用及杂项技术。...
基于
linux
的
UDP
C++
工具类及使用
基于
linux
系统封装的
UDP
C++
工具类,资源包含工具类及其使用的样例,采CMakeLists构建工程。
linux
系统:ubuntu cmake版本: 3.0及以上 该工具类适用于
linux
系统的芯片的
UDP
通信
。
基于
Linux
C:
C++
UDP
Socket
通信
实例.zip
本项目是
UDP
项目,内含源码和教程可以直接部署,创作不易欢迎交流
C++ 语言
64,691
社区成员
250,497
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章