linux下用C++写UDP通信程序该怎么写?

kunp 2004-06-23 10:08:17
找了一些代码,都是C的,用gcc编译是没有问题,但用g++编译报错,linux下用C++怎么写UDP、TCP的通信程序?好像C++的标准库并不带网络类,要直接调用系统的C库,不知道该怎么做咧?
...全文
289 6 打赏 收藏 转发到动态 举报
写回复
用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++代码呢?

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧