平时工作中主要用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 client server c from unp
udp echo server and client use them they r working fine
linux下udp_server,网上搜的,编译能用
Example UDP server for Linux.
linux UDP 网络通信程序例子,适合初学者学习。
UDP echo client server
linux c tcpserver tcpclient udpserver udpclient select:包括tcpserver并发多客户端连接和数据收发;
本篇文章提供一个软件实现守护进程的办法,原理就是udp通信,单独写个守护进程程序,专门负责检测主程序是否存在,不存在则启动。主程序只需要启动live类监听端口,收到hello就回复ok就行。 为了使得兼容任意程序,...
udp server 很好学习资料
在linux下,利用流套接字实现一个简单的基于UDP的server/client模型的web远程控制系统
这是一个简单的程序,它基于UDP的ECHO程序,适合初学者。
主要介绍了Linux UDP socket 设置为的非阻塞模式与阻塞模式区别的相关资料,需要的朋友可以参考下
在这样的背景下,您编写的Linux UDP服务端可以用来处理客户端发送过来的UDP数据包,并给客户端返回响应数据。作为一个简单的UDP服务端,它可以为开发人员提供一个基础框架,用于实现各种网络应用程序。例如,您可以...
linux UDP编程总结和实例
udp_echoserver DP83848网络服务函数库,配合教程完美实现数据的收发,测试平台STM32F407,其他同理
本代码仅有参考价值。...本程序原本想做远程修改LINUX系统的IP(debian),最终绕不过LINUX的安全认证,但是UDP通讯正常通讯(自己写的,可以参考下)。有问题可以发邮件到enke_zyl@163.com。没积分也可以邮件要代码!
linux下 ipv6 UDP SERVER 服务器端
基于LINUX系统的SOCKET通信,使用UDP协议.
采用C++ 面向对象的思想 编写的socket的服务器端类和客户端类; 简单实现了UDP的echo,客户端向服务器端发送的消息会反回来; linux qt环境下编写。
Linux 下 UDP 网络编程的基本服务器模型步骤、循环服务器模型步骤和并发服务器模型步骤,包括代码和步骤注释