网普科技
网普管理员
网普科技人民公仆
积分 3080
发贴 2863
注册 2004-6-26 来自 网普科技
状态 离线
|
#2
inetd_udp_serv.c(文件名)
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h> /*套接字头文件*/
#include<netinet/in.h>
#include<sys/wait.h>
#include<fcntl.h> /*文件处理头文件*/
#define MAXLEN 65535 /*缓冲区最大长度*/
int main(int argc,char argv[]) /*argc,argv为主程序的参数*/
{
int sockfd,n;
int fd;
struct sockaddr_in serv_addr,cli_addr;/*服务器、客户机套接
字地址*/
int addr_len,numbytes;
char buf[MAXLEN]; /*缓冲区,用于接受数据*/
addr_len=sizeof(struct sockaddr);/*套接字长度*/
for(;;)
{ sockfd=0; /*设置套接字为标准输入*/
if(numbytes=recvfrom(sockfd,buf,MAXLEN,0,(struct sockaddr *)&cli_addr,&addr_len)==-1)
/*接收客户机数据报,写入缓冲区,客户机地址写入cli_addr 中*/
{ perror(“recvfrom”); exit(1); }
buf[numbytes]=’\0’; /*置结束符*/
fd=open(“recv_text.txt”,O_RDWR|O_CREAT);
numbytes=write(fd,(char )buf,numbytes);/*将接收到的数据写入
文件*/
close(fd);
sockfd=1; /*设置套接字为标准输出*/
sendto(sockfd,buf,numbytes,0,&cli_addr,sizeof(struct sockaddr)); /*将接收到的数据返还给客户机*/
}
close(sockfd);
}
对应的客户机程序:client.c
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdio.h>
#define MAX 1024;
int main(int argc,int argv[])
{
int sockfd,n;
char buf[MAX];
struct sockaddr_in addr;
if(argc!=3) {
fprintf(stderr,“usage:client ipaddr port\n”);/*用法*/
exit(1);
}
sockfd=socket(AF_INET,SOCK_DGRAM,0);/*创建数据报套接字*/
if(sockfd<0) {
fprintf(stderr,”socket error!\n”);
exit(1);
}
bzero(&addr,sizeof(addr));
addr.sin_family=AF_INET;
addr.sin_port=htons(atoi(argv[2]));
if(inet_aton(argv[1],&addr.sin_addr)<0) {
fprintf(atderr,”inet_aton error.\n”);
exit(1);
}
for(;fgets(buf,MAX,stdin)!=NULL;)/*从stdin接受数据*/ {
sendto(sockfd,buf,strlen(buf),0,addr,sizeof(addr));/*发送数据报*/
n=recvfrom(sockfd,buf,MAX,0,NULL,NULL);/*接收数据报*/
buf[n]=0;
fputs(buf,stdout); /*将服务器返回的数据报输出*/
}
close(sockfd);
}
|
天理路上甚宽,稍游心,胸中便觉广大宏朗;
人欲路上甚窄,才寄迹,眼前俱是荆棘泥涂。
网普科技,优质美国主机服务!
美国Linux主机,美国虚拟主机
支持PHP+MYSQL+cPanel+EMAIL
为用户负责,拒绝反动、赌博及色情内容! QQ:126818
发送QQ消息 |
|