`
bachmozart
  • 浏览: 111351 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Linux UDP EchoServer守护进程编写

阅读更多
平时工作中主要用java,不过还是对Linux非常喜爱,虽然学习时间有限,每天还是能学点小东西,呵呵,写了一个HelloWorld版的Linux守护进程,启动后监听UDP端口做简单的echo back

Server代码

#include<sys/socket.h>
#include<netinet/in.h>
#include<strings.h>
#include<stdio.h>
#include<syslog.h>
#include<stdlib.h>
#include<signal.h>
#include        <sys/types.h>   /* basic system data types */
#include        <sys/socket.h>  /* basic socket definitions */
#include        <sys/time.h>    /* timeval{} for select() */
#include        <time.h>                /* timespec{} for pselect() */
#include        <netinet/in.h>  /* sockaddr_in{} and other Internet defns */
#include        <arpa/inet.h>   /* inet(3) functions */
#include        <errno.h>
#include        <fcntl.h>               /* for nonblocking */
#include        <netdb.h>
#include        <signal.h>
#include        <stdio.h>
#include        <stdlib.h>
#include        <string.h>
#include        <sys/stat.h>    /* for S_xxx file mode constants */
#include        <sys/uio.h>             /* for iovec{} and readv/writev */
#include        <unistd.h>
#include        <sys/wait.h>
#include        <sys/un.h>              /* for Unix domain sockets */
int init_deamon(){
  pid_t pid;
  if((pid=fork())<0){
     return (-1);
  }else if(pid){
    exit(0);
  }
  if(setsid()<0){
    return (-1);
  }
  signal(SIGHUP,SIG_IGN);
  if((pid=fork())<0){
     return (-1);
  }else if(pid){
    exit(0);
  }
  chdir("/");
  int i=0;
  for(;i<64;i++){
    close(i);
  }
  open("/dev/null",O_RDONLY);
  open("/dev/null",O_RDWR);
  open("/dev/null",O_RDWR);
  openlog("deamon server start for udp",LOG_PID,0);
  syslog(LOG_INFO|LOG_LOCAL2,"Yep,That's me");
  return (0);
}
void dg_echo(int sockfd,struct sockaddr *cliaddr,socklen_t clilen){
   int n;
   socklen_t len;
   char str[16];
   char msg[1024];
   for(;;){
      len=clilen;
      n=recvfrom(sockfd,msg,1024,0,cliaddr,&clilen);     
      printf("recv from %s \n",inet_ntop(AF_INET,&cliaddr,str,sizeof(str))); 
      sendto(sockfd,msg,n,0,cliaddr,clilen);
      msg[n]=0;
      fputs(msg,stdout);
      syslog(LOG_INFO|LOG_LOCAL2,msg);
   }
}
int main(int argc,char **argv){
   int sockfd;
   struct sockaddr_in servaddr,cliaddr;
   init_deamon();
   sockfd=socket(AF_INET,SOCK_DGRAM,0);
   bzero(&servaddr,sizeof(servaddr));
   servaddr.sin_family=AF_INET;
   servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
   servaddr.sin_port=htons(22111);
   bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
   dg_echo(sockfd,(struct sockaddr *)&cliaddr,sizeof(cliaddr));
}



client 代码

#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<strings.h>
void dg_cli(FILE *fp,int sockfd,struct sockaddr *servaddr,socklen_t servlen){
   int n;
   socklen_t len;
   struct sockaddr *replyaddr;
   replyaddr=malloc(servlen);
   char readline[1024],sendline[1025];
   char str[16];
   connect(sockfd,servaddr,servlen);
   while(fgets(sendline,1024,fp)!=NULL){
      write(sockfd,sendline,strlen(sendline));
      n=read(sockfd,readline,1024);
    //  if(len!=servlen||memcmp(servaddr,replyaddr,len)!=0){
    //      printf("reply from %s (ignored)\n",inet_ntop(AF_INET,&replyaddr,str,sizeof(str)));
    //      continue;
    //  }
      readline[n]=0;
      fputs(readline,stdout);
   }
}
int main(int argc,char **argv){
   int sockfd;
   struct sockaddr_in servaddr;
   if(argc!=2){
      printf("usage:udpcli <IPAddress>\n");
      exit(1);
   }
   bzero(&servaddr,sizeof(servaddr));
   servaddr.sin_family=AF_INET;
   servaddr.sin_port=htons(22111);
   inet_pton(AF_INET,argv[1],&servaddr.sin_addr);

   sockfd=socket(AF_INET,SOCK_DGRAM,0);
   dg_cli(stdin,sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));

   exit(0);
}
分享到:
评论

相关推荐

    udp echo server client

    在本项目"udp echo server client"中,我们将探讨如何使用C语言实现一个简单的UDP回显服务器(echo server)和客户端(client)。这个项目可能来自于《Unix Network Programming》(通常简称UNP)一书中的示例。 ...

    udp_echoserver DP83848网络服务函数库

    在本项目中,“udp_echoserver”是一个基于DP83848网络服务函数库的UDP服务器示例,主要用于演示如何在STM32F407这样的微控制器上实现UDP通信。 DP83848是一款常见的以太网控制器,广泛应用于嵌入式系统,为设备...

    Qt编写守护进程

    本篇文章提供一个软件实现守护进程的办法,原理就是udp通信,单独写个守护进程程序,专门负责检测主程序是否存在,不存在则启动。主程序只需要启动live类监听端口,收到hello就回复ok就行。 为了使得兼容任意程序,...

    UDP_ECHO.rar_ udp_echo_server_UDP server client_echo server_them

    UDP_ECHO.rar 包含的是一个基于UDP协议实现的回显服务器(UDP Echo Server)和客户端(UDP Echo Client)的示例程序,它们用于测试网络连接和理解UDP协议的工作原理。 回显服务是网络通信中的一个基础概念,它接收...

    Linux系统中守护进程的创建方法.pdf

    守护进程与 Windows 中的后台服务程序比较类似,如 Windows 中有一种 time 系统服务,用来从远程主机获得日期和时间,Linux 中也有类似 的两个守护进程 time 和 time-udp,分别采用 TCP 和 UDP 协议从远程主机获得...

    linux下udp_server

    linux下udp_server,网上搜的,编译能用

    server_udp.zip_UDP_UDP_server_linux UDP_udp server

    Example UDP server for Linux.

    UDP.rar_UDP_linux UDP_linux UDP makefile_udp linux

    在标签"udp linux_udp linux_udp__makefile udp_linux__"中,`linux_udp`和`udp_linux`暗示了这是与Linux系统相关的UDP编程,而`makefile_udp`提示我们项目中包含了一个`Makefile`,这是用于自动化编译和链接C或C++...

    linux下UDP,server/client模型

    总的来说,构建一个基于Linux的UDP Server/Client模型,需要理解UDP协议的特性,熟悉套接字编程,并且对于Web远程控制,还需要掌握一定的Web开发知识。通过这样的模型,我们可以实现高效、实时的远程控制解决方案。

    udp_server.zip_UDP_linux UDP_udp server

    udp server 很好学习资料

    linux tcpserver tcpclient udpserver udpclient select并发编程

    本文将深入探讨在Linux环境下,使用C语言实现TCP服务器(tcpserver)、TCP客户端(tcpclient)、UDP服务器(udpserver)以及UDP客户端(udpclient)的并发编程,并涉及select模型用于处理多个连接请求。以下是关于...

    UDP-echo-client-server.rar_Echo Echo_java udp_java udp echo_udp

    在这个“UDP echo client server”项目中,我们有两个核心文件:UDPClient.java 和 UDPEchoServer.java。这两个文件分别实现了UDP协议中的客户端和服务端功能,用于演示UDP数据包的发送和接收,也就是所谓的回显服务...

    Linux UDP 编程步骤

    在 Linux 系统中,UDP (User Datagram Protocol) 是一种无连接的传输层协议,它提供了简单、快速但不保证数据传输的可靠性。相比于 TCP,UDP 更加轻量级,适用于实时应用,如在线视频、游戏等。下面将详细介绍 Linux...

    Linux UDP socket 设置为的非阻塞模式与阻塞模式区别

    ### Linux UDP Socket 非阻塞模式与阻塞模式的区别详解 #### 一、引言 在进行网络编程时,我们经常会遇到阻塞模式与非阻塞模式的选择问题。这两种模式直接影响程序的运行效率和资源利用率。本文将详细介绍在Linux...

    基于LINUX的UDP通信

    在Linux中,使用C语言编写UDP通信程序时,首先需要包含必要的头文件,如`#include &lt;sys/socket.h&gt;`,`#include &lt;netinet/in.h&gt;`和`#include &lt;arpa/inet.h&gt;`。这些头文件包含了定义SOCKET句柄、地址结构和网络函数的...

    linux udp server简单c代码

    在这样的背景下,您编写的Linux UDP服务端可以用来处理客户端发送过来的UDP数据包,并给客户端返回响应数据。作为一个简单的UDP服务端,它可以为开发人员提供一个基础框架,用于实现各种网络应用程序。例如,您可以...

    深入了解Linux的守护进程

    Linux守护进程,也被称为服务,是Linux操作系统中的关键组成部分,它们在后台持续运行,执行着各种系统任务和服务。这些进程不依赖于任何控制终端,并且通常在系统启动时启动,直到系统关闭时才会终止。守护进程是...

    udp.rar_linux UDP_linux c udp_linux udp arm_udp linux

    在Linux环境下,我们可以使用标准的socket API来编写UDP程序。首先,通过`socket()`函数创建一个socket描述符,然后用`bind()`函数绑定本地的IP地址和端口号。对于服务器端,`recvfrom()`用于接收数据,并可以获取...

    linux UDP编程总结和实例

    Linux UDP编程是网络编程中的一个重要部分,UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的传输层协议,适用于实时性要求高、对数据完整性要求不那么严格的应用场景。在这个主题中,我们将...

Global site tag (gtag.js) - Google Analytics