首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>网络管理>linux服务器>正文

通过Linux socket读取Linux服务器上的文件

http://www.oklinux.cn  2008-10-25  Linux社区    会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

从Linux客户机上读取另一台Linux服务器上指定目录下的文件,服务器端代码和客户端代码实现如下:

#include <string>
#include <string.h>
#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <time.h>
#include <arpa/inet.h>

#define SERVER_PORT 20000 // define the defualt connect port id
#define LENGTH_OF_LISTEN_QUEUE 10 //length of listen queue in server
#define BUFFER_SIZE 255
#define LINE_LEN 60 // in the file, define one line's length
#define WELCOME_MESSAGE "welcome to connect the server. "

int main(int argc, char **argv)
{
int servfd,clifd;
char s[LINE_LEN];
struct sockaddr_in servaddr,cliaddr;

if ((servfd = socket(AF_INET,SOCK_STREAM,0)) < 0){
printf("create socket error!\n");
exit(1);
}

bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERVER_PORT);
servaddr.sin_addr.s_addr = htons(INADDR_ANY);

if (bind(servfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0){
printf("bind to port %d failure!\n",SERVER_PORT);
exit(1);
}

if (listen(servfd,LENGTH_OF_LISTEN_QUEUE) < 0){
printf("call listen failure!\n");
exit(1);
}

while(1){ //server loop will nerver exit unless any body kill the process
char buf[BUFFER_SIZE];
long timestamp;
socklen_t length = sizeof(cliaddr);

clifd = accept(servfd,(struct sockaddr*)&cliaddr,&length);
if (clifd < 0){
printf("error comes when call accept!\n");
break;
}

strcpy(buf,WELCOME_MESSAGE);

printf("from client,IP:%s,Port:%d\n",inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));
timestamp = time(NULL);
strcat(buf,"timestamp in server:");
strcat(buf,ctime(&timestamp));

// read file rule.txt
FILE* stream_src = fopen( "rule.txt", "r " );
if( stream_src=../../=NULL ){
printf("the file rule.txt is not opened correctly!\n");
return 1;
}

while( fgets(s,sizeof(s),stream_src) ){ // 按行读取
printf( "%s", s );
strcat( buf,s );
}

// send file's content to client
send(clifd,buf,BUFFER_SIZE,0);
close(clifd);
}

close(servfd);
return 0;
}

#include <string>
#include <string.h>
#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <arpa/inet.h>

#define SERVER_PORT 20000 // define the defualt connect port id
#define CLIENT_PORT ((20001 rand())e536) // define the defualt client port as a random port
#define BUFFER_SIZE 255
#define REUQEST_MESSAGE "welcome to connect the server.\n"

void usage(char *name)
{
printf("usage: %s IpAddr\n",name);
}

int main(int argc, char **argv)
{
int servfd,clifd,length = 0;
struct sockaddr_in servaddr,cliaddr;
socklen_t socklen = sizeof(servaddr);
char buf[BUFFER_SIZE];

if (argc < 2){
usage(argv[0]);
exit(1);
}

if ((clifd = socket(AF_INET,SOCK_STREAM,0)) < 0){
printf("create socket error!\n");
exit(1);
}

srand(time(NULL));//initialize random generator
bzero(&cliaddr,sizeof(cliaddr));
cliaddr.sin_family = AF_INET;
cliaddr.sin_port = htons(CLIENT_PORT);
cliaddr.sin_addr.s_addr = htons(INADDR_ANY);

bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
inet_aton(argv[1],&servaddr.sin_addr);
servaddr.sin_port = htons(SERVER_PORT);
//servaddr.sin_addr.s_addr = htons(INADDR_ANY);

if (bind(clifd,(struct sockaddr*)&cliaddr,sizeof(cliaddr))<0){
printf("bind to port %d failure!\n",CLIENT_PORT);
exit(1);
}

if (connect(clifd,(struct sockaddr*)&servaddr, socklen) < 0){
printf("can't connect to %s!\n",argv[1]);
exit(1);
}

length = recv(clifd,buf,BUFFER_SIZE,0);
if (length < 0){
printf("error comes when recieve data from server %s!",argv[1]);
exit(1);
}

printf("from server %s :\n\t%s ",argv[1],buf);

close(clifd);
return 0;
}


上一篇:FreeBSD作服务器安装Ubuntu 8.04 Desktop PXE无盘工作站   下一篇:Linux环境下Apache与Tomcat共存

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·Linux环境下Apache与Tomcat共存
·FreeBSD作服务器安装Ubuntu 8.04 Desktop PXE无盘工作
·Linux环境下JDK,JBOSS以及MySQL的安装配置
·Redhat Linux 9.0 下 Apache的简单应用配置
·如何SSH远程连接虚拟机中的Ubuntu
·使用Linux的rsync命令实现:多服务器镜像同步
·Windows远程控制SUSE Linux 10
·Linux DNS Server -bind 9.5.0 安装配置与高级应用
·Linux下简单的DNS实例一则
·Linux系统中开关端口的方法
·实现Linux操作系统下DNS服务器的搭建
·Ubuntu 配置基于Eclipse 的PHP 开发环境
·让WordPress在Ubuntu系统运行起来
·在Apache中配置虚拟主机
·教你在Linux下安装telnet服务器
·Ubuntu 8.10配置VPN网络及碰到问题的解决
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·利用VSFTP架设Linux环境下的FTP服务器
·Linux下安装Apache 2.2.6 笔记
·Linux下的主要VPN技术
·Linux下Samba服务器搭建实例
·用Sendmail在Linux下架设邮件服务器
·2009服务器盘点:再见Sun 再见麦克利尼
·SUSE 10上做VPN服务器
·在Ubuntu 9.10中打造带tdbsam Backend
·Ubuntu服务器上SSH Server 的安装配置
·Nginx 禁止某个 User_Agent 的方法
·Linux-Apache-MySQL-PHP网站架构方案分
·Nginx 对某些 User_Agent 进行限速的方
  阅读排行
·Linux系统下架设APACHE SVN服务器全过
·Linux下用vsftp轻松搭建FTP服务器(修订
·Ubuntu下安装tftp服务器的步骤
·Linux 下配置vsftp虚拟用户总结
·详解远程SHELL下安装配置RedHat ES 5的
·Linux下安装eclipse与myeclipse
·Linux DNS Server -bind 9.5.0 安装配
·Linux与Linux,Linux与Windows之间使用S
·Ubuntu上搭建SVN服务器全攻略
·LVS集群学习笔记(NAT\DR\IP tunnel)
·Linux下tomcat启动jvm内存设置
·Linux shell 中FTP实现自动下载上传文
·安装大型Linux集群(4):节点安装和 GPFS
·Linux系统下架设PPTP VPN服务器
·Linux系统中下查看内存的方法
网摘收藏: