社区
Linux/Unix社区
帖子详情
我在用C编写一个服务器端和客户端用来发送文件,但是read不到数据,我sleep三秒之后又能接收到数据了,这是为什么啊
qgstrong
2014-02-24 02:03:00
我在用C编写一个服务器端和客户端用来发送文件,但是read不到数据,我sleep三秒之后又能接收到数据了,这是为什么啊
...全文
124
7
打赏
收藏
我在用C编写一个服务器端和客户端用来发送文件,但是read不到数据,我sleep三秒之后又能接收到数据了,这是为什么啊
我在用C编写一个服务器端和客户端用来发送文件,但是read不到数据,我sleep三秒之后又能接收到数据了,这是为什么啊
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qgstrong
2014-02-26
打赏
举报
回复
在本机上是完好的,但是两台机器互传的话不行 ,这是为什么啊
qgstrong
2014-02-24
打赏
举报
回复
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <fcntl.h> #include <dirent.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <errno.h> #include <netdb.h> #define PORT 8000 #define ADDR "127.0.0.1" #define MAX 4096 #define FILE_NAME_MAX 1024 int sock_fd; send_() { char buffer[MAX]; char buf[MAX]; char filename[FILE_NAME_MAX]; memset(buffer,0,sizeof(buffer)); memset(buf,0,sizeof(buf)); memset(filename,0,sizeof(filename)); printf("please enter your send file name!\n"); //fgets(buffer,MAX,stdin); scanf("%s",buffer); getchar(); printf("the file name is:%s\n",buffer); if(write(sock_fd,buffer,strlen(buffer))==-1) { perror("write"); return -1; } memset(buffer,0,sizeof(buffer)); printf("please enter your send file name and path!\n"); // fgets(buffer,MAX,stdin); scanf("%s",buffer); getchar(); printf("the path is :%s\n",buffer); FILE *fp; if((fp=fopen(buffer,"r+b")) == NULL) { perror("fopen"); return -1; } if(fread(buf,sizeof(char),sizeof(buf),fp)<0) { perror("fread"); return -1; } printf("the file is:%s\n",buf); if(write(sock_fd,buf,sizeof(buf))==-1) { perror("write"); return -1; } fclose(fp); } recieve() { char buf[MAX]; char buffer[MAX]; char filename[FILE_NAME_MAX]; int nread=0; //memset(filename,0,sizeof(filename)); memset(filename,0,sizeof(filename)); // printf("please enter the file name\n"); // scanf("%s",filename); // getchar(); printf("please enter the filename\n"); scanf("%s",filename); getchar(); /* nread=0; if((nread=write(sock_fd,filename,sizeof(filename)))==-1) { perror("write"); return -1; }*/ nread=0; if((nread=write(sock_fd,filename,strlen(filename)))==-1) { perror("write"); return -1; } /* memset(buffer,0,sizeof(buffer)); memset(buf,0,sizeof(buf)); if((nread=read(sock_fd,buf,sizeof(buf)))==-1) { perror("read\n"); return -1; } memset(filename,0,sizeof(filename)); strncpy(filename,buf,strlen(buf));*/ // printf("please enter the file name:\n"); // scanf("%s",filename); // getchar(); // printf("the file name is:%s\n",filename); memset(buf,0,sizeof(buf)); nread=0; if((nread=read(sock_fd,buf,sizeof(buf)))==-1) { perror("read\n"); return -1; } printf("the nread is:%d\n",nread); memset(buffer,0,sizeof(buffer)); strncpy(buffer,buf,strlen(buf)); printf("%s\n",buffer); FILE *fd; fd=fopen(filename,"wb+"); fwrite(buffer,sizeof(char),strlen(buffer),fd); fclose(fd); } init_socket() { struct sockaddr_in serveraddr,clientaddr; char buf[MAX]; char filename[MAX]; char buffer[MAX]; int nread; if((sock_fd = socket(AF_INET,SOCK_STREAM,0)) == -1) { perror("socket"); return -1; } printf("socket创建成功!\n"); memset(&serveraddr,0,sizeof(serveraddr)); serveraddr.sin_family=AF_INET; serveraddr.sin_port=htons(PORT); serveraddr.sin_addr.s_addr=inet_addr(ADDR); if(connect(sock_fd,(struct sockaddr *)&serveraddr,sizeof(serveraddr))==-1) { perror("connect"); return -1; } printf("connect success!\n"); memset(buf,0,sizeof(buf)); loop:printf("please enter D , L or S\n"); scanf("%s",buf); switch(buf[0]) { case 'D': write(sock_fd,buf,sizeof(buf)); recieve(); break; case 'S': write(sock_fd,buf,sizeof(buf)); send_(); break; case 'L': write(sock_fd,buf,sizeof(buf)); memset(buf,0,sizeof(buf)); read(sock_fd,buf,sizeof(buf)); printf("%s\n",buf); memset(buf,0,sizeof(buf)); goto loop; break; default : printf("please enter again\n"); goto loop; break; } } main() { init_socket(); close(sock_fd); }
昵称很不好取
2014-02-24
打赏
举报
回复
客户端代码呢
qgstrong
2014-02-24
打赏
举报
回复
client和server差不多,send_()和recieve()是一样的
qgstrong
2014-02-24
打赏
举报
回复
是阻塞的 在本机上sever和client是正常的,若是两台机器传输的话 if((nread=read(client_fd,buf,sizeof(buf)))==-1) { perror("read\n"); return -1; } else if(nread==0) { printf("client has closed\n"); } else { printf("reciev\n"); } printf("the buf is:%s\n",buf);这里输出的是"the buf is:"
qgstrong
2014-02-24
打赏
举报
回复
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <fcntl.h> #include <dirent.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <errno.h> #include <netdb.h> #define PORT 8000 #define MAX 4096 #define FILE_NAME_MAX 1024 int sock_fd,client_fd; send_() { char buffer[MAX]; char path[MAX]; int nread; memset(buffer,0,sizeof(buffer)); memset(path,0,sizeof(path)); // fgets(buffer,MAX,stdin); // getchar(); /* if((nread=read(client_fd,buffer,sizeof(buffer)))==-1) { perror("read"); return -1; } strncpy(filename,buffer,strlen(buffer)); printf("the file name is:%s\n",filename);*/ // memset(buffer,0,sizeof(buffer)); //fgets(filename,MAX,stdin); //scanf("%s",filename); //getchar(); nread=0; if((nread=read(client_fd,buffer,sizeof(buffer)))==-1) { perror("read"); return -1; } strncpy(path,buffer,strlen(buffer)); printf("the path is:%s\n",path); /* nread=0; if((nread=write(client_fd,filename,strlen(filename)))==-1) { perror("write"); return -1; }*/ memset(buffer,0,sizeof(buffer)); FILE *fd; fd=fopen(path,"r+b"); fread(buffer,sizeof(char),sizeof(buffer),fd); printf("%s\n",buffer); nread=0; if((nread=write(client_fd,buffer,strlen(buffer)))==-1) { perror("write"); return -1; } printf("send success %d\n",nread); fclose(fd); } recieve() { char buf[MAX]; char filename[MAX]; int nread=0; memset(buf,0,sizeof(buf)); memset(filename,0,sizeof(filename)); if((nread=read(client_fd,buf,sizeof(buf)))==-1) { perror("read\n"); return -1; } else if(nread==0) { printf("client has closed\n"); } else { printf("revieve the file name is : %s\n",buf); } strncpy(filename,buf,strlen(buf)); printf("the filename is:%s\n",filename); memset(buf,0,sizeof(buf)); nread=0; if((nread=read(client_fd,buf,sizeof(buf)))==-1) { perror("read\n"); return -1; } else if(nread==0) { printf("client has closed\n"); } else { printf("reciev\n"); } printf("the buf is:%s\n",buf); FILE *fd; fd=fopen(filename,"wb+"); fwrite(buf,sizeof(char),strlen(buf),fd); fclose(fd); } socket_init() { struct sockaddr_in serveraddr,clientaddr; socklen_t addrlen; char buf[MAX]; char buffer[MAX]; int nread; char path[1024]="/home/qg/qiguo/myftp/file/a.sh"; if((sock_fd=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket"); return -1; } printf("socket 创建成功\n"); memset(&serveraddr,0,sizeof(serveraddr)); serveraddr.sin_family=AF_INET; serveraddr.sin_addr.s_addr=htons(INADDR_ANY);//自动取本机地址 serveraddr.sin_port=htons(PORT); if(bind(sock_fd,(struct sockaddr *)&serveraddr,sizeof(serveraddr))==-1) { perror("bind"); return -1; } printf("绑定成功!\n"); if(listen(sock_fd,10)==-1) { perror("listen"); return -1; } printf("开始监听!\n"); while(1) { addrlen=sizeof(clientaddr); if((client_fd=accept(sock_fd,(struct sockaddr *)&clientaddr,&addrlen))==-1) { perror("accept"); return -1; } printf("接收成功\n"); char buf[MAX]; int nread; loop: memset(buf,0,sizeof(buf)); if((nread=read(client_fd,buf,sizeof(buf)))==-1) { perror("read"); return -1; } switch(buf[0]) { case 'S': recieve(); break; case 'D': send_(); break; case 'L': memset(buffer,0,sizeof(buffer)); FILE *qg; qg=popen("ls","r"); fread(buffer,sizeof(char),sizeof(buffer),qg); write(client_fd,buffer,sizeof(buffer)); // system(path); goto loop; break; default: printf("please enter again\n"); goto loop; break; } } } main() { socket_init(); close(sock_fd); close(client_fd); }
昵称很不好取
2014-02-24
打赏
举报
回复
fd是阻塞还是非阻塞的? read返回值是什么 上程序吧
oracle19c_oca_ocp_ocm实战
本系列课程分为,0-理论知识部分 0.1-oca_ocp_ocm相关知识内容(uploading)1-安装部分 1.1单实例命令行安装 1.2单实例图形安装 1.3rac安装 1.4rac(pdb架构)+dg 单实例安装(用rman的duplicate和rman备份2种方式搭建dg) 1.5rac(pdb架构)+rac dg2-迁移部分 2.1单实例之间的迁移 2.2单实迁移到rac 2.3rac迁移到单实例 2.4rac和rac之间的迁移。 2.5关于xtts的迁移方法的使用3-恢复部分 3.1单实例本地恢复 3.2rac本地恢复4-
数据
库升级部分 4.1 19.3升级到19.13 4.2 12.1.0.2升级到19.3 4.3 12.2.0.1升级到19.3 4.4 19.3的rac升级到19.135-
数据
库优化部分 5.1如何看懂执行计划 5.2 hash, nest loop, merge的执行计划各自适用于那种场景? 5.3为什么要用直方图,19c的直方图有frency, balance, top-frenkency, hybrid?允许最大的bucket是多少?6-
数据
库asm磁盘操作部分 6-1如何用一条命令迁移rac存储。 6-2如何用笨方法迁移rac存储。 6-3目前asm磁盘是external冗余级别,如何修改为normal的冗余级别。7-
数据
库工具部分 7.1oem如何进行安装,如何进行纳管
数据
库,如何使用 7.2如何用oem监控
数据
库 8-综合实战。 a库是11.2.0.3的单实例
数据
库,容量有20T。 b库是19.13的rac环境的pdb
数据
库,容量只有21T. 如何把a库的
数据
迁移到b库的pdb
数据
库? 这个综合实战非常考验大家,基本上囊括了
数据
库复制安装,
数据
库dg,
数据
库升级的方方面面。 大家可以自己先想想怎么实现。一课程主题手把手带大家进行实操,在实操中提升自己手把手带大家学习orace 19的ocm课程,学完本课程,至少具有3-5年oracle
数据
库水平。文档和视频is uploading. 二课程特色 学oracle,找阿伟阿伟出品,必属精品从实战出发,贴近实战,自己实战,实战为王,在实战中提升自己授人以鱼不如授人以渔通过此系列课程可以提高3-5年oracle水平交个朋友,物有所值,诚意满满走心课程,把自己在运维中的坑,提炼知识后,实战给大家 三课程内容 0.理论知识部分(上传中。。。) 0.1
数据
库监听(动态监听,静态监听,多个ip同时监听1521,
一个
ip监听多个service_name) 0.2rman 命令中的set rename datafile和 alter database rename datafile 有啥区别? 0.3 ............1.
数据
库单实例安装 1.0 安装检查 1.0.1安装包检查 1.0.2修改系统参数 1.0.3
数据
库用户创建 1.0.4创建目录 1.0.5上传安装软件包 1.0.6修改oracle用户环境变量 1.1 rhel7系统图形安装oracle 19c单实例
数据
库 1.2 rhel7系统命令行安装 1.2.0命令行安装
数据
库软件 1.2.1命令行创建non cdb
数据
库实例 1.2.2命令行创建 cdb
数据
库实例2.rac
数据
库安装 1.课程结束成果演示 1.1 用workstation,安装一套rhel7+oracle19c+rac+multipath+共享存储+DNS服务器+DNS
客户端
+NTP服务器+NTP
客户端
的生产环境 1.2 怎样打oracle19c的rac补丁(包括GI补丁,oracle补丁,
数据
库补丁,OJVM补丁,bug补丁) 2.安装openfiler软件,模拟共享存储+配置多路径访问 2.1安装openfiler软件 2.2配置openfiler软件(配置2个虚拟网卡,模拟服务器的2个HBA卡) 2.3创建ocr磁盘 2.4创建mgmt磁盘 2.5创建
数据
文件
磁盘 2.6创建归档日志磁盘 3.安装2台
数据
库服务器 3.1安装2台
数据
库服务器RHEL7.5 3.2配置服务器双网卡绑定+配置服务器心跳线 4.安装多路径软件识别共享存储中的磁盘 4.1安装服务器本地yum源 4.2安装iscsi软件,配置多路径配置
文件
,识别共享存储中的磁盘 4.3识别ocr磁盘 4.4识别mgmt磁盘 4.5识别
数据
文件
磁盘 4.6识别归档日志磁盘 5.oracle19c的rac环境系统参数官方说明 5.1如何配置oracle19c的rac的系统参数(我们参考官方说明) 5.2oracle19c+rac环境Best Practices 官方说明文档 6.安装oracle19c+rac之前的准备工作 6.1修改/etc/hosts
文件
6.2配置DNS服务器+DNS
客户端
+NTP服务器+NTP
客户端
6.3创建用户和组 6.4创建目录 6.5修改用户环境变量 6.6安装相关软件包 6.7配置ssh互信 6.9禁用服务器透明大页 7.安装oracle+19c+rac软件 7.1安装GI软件 7.2创建ASM磁盘,主要是
数据
文件
磁盘和归档日志磁盘 7.3安装
数据
库软件 7.4创建
数据
库实例 7.5日常常用维护集群命令(启停
数据
库,启停集群,查看监听,教同学们怎样不死记命令,而且命令还正确) 8.打补丁 8.1打GI和ORACLE的操作系统补丁 8.2打OJVM补丁 8.3打ORA600的bug补丁 9.课程总结和成果演示 9.1课程总结和成果演示3.rac+dg(单实例)
数据
库安装(pdb架构) 3.1.1dg知识点讲解 3.1.2配置dg监听,密码
文件
,参数
文件
。 3.1.2通过rman的duplicate命令进行dg搭建1。 3.1.3通过rman的duplicate命令进行dg搭建2 3.1.4进行
数据
库切换需要的配置。 3.1.5
数据
库正常switch over 3.1.6
数据
库如何fail over 3.1.7dg库failover以后通过闪回快速恢复dg 3.1.8dg库failover以后通过新主库的控制
文件
快速恢复dg 3.1.9备库归档缺失如何进行解决。 3.1.10recover database和recover standby database是否可以在dg中使用? 3.1.11如何通过rman的备份进行搭建dg。 3.1.12dg库使用静态监听无法监听pdb
数据
库的service问题如何进行解决? 4.rac+rac dg的实战步骤(pdb架构)(上传中。。。)5.19c单实例
数据
库通过rman备份进行异机迁移到单实例
数据
库 5.1通过备份脚本进行
数据
,归档,控制
文件
备份 5.2通过备份脚本进行归档,控制
文件
备份 (注意源库备份目录是/backup/db和/backup/ar) 5.3传输备份
文件
到目标库 (传输备份
文件
到目标库的/home/oracle/bk目录) 5.4利用参数
文件
启动
数据
库到nomount 5.5利用备份集恢复控制
文件
,并启动
数据
库到mount 5.6通过restore database恢复
数据
库 5.6.1注册目标库备份集到控制
文件
5.6.2启动
数据
库到mount状态,确定recover database的序列号 5.7recover database 5.7.1通过rman 进行recover database 5.7.2通过sql 命令行进行 recover database; 5.8.打开
数据
库 5.8.1解决打开
数据
库后,sys用户无法远程监听登录问题 5.8.2修改
数据
库动态参数启动
数据
库 5.9.备份的扩展 5.9.1如何知道备份集里面有哪些归档 5.9.2如何从这些备份集中提取归档 5.9.3进行异机
数据
库迁移时,如何逐步应用归档,并且如何open
read
only
数据
库后,继续应用归档 5.9.4为何要进行 open
read
only进行提前打开验证。 5.10.rman迁移备份的补充 5.10.1如何再rman中设置
数据
文件
,在线日志生成路径。 类似如下命令 run 6单实例
数据
库无
数据
丢失通过rman备份异机迁移到rac
数据
库和rac
数据
库通过rman迁移到rac
数据
库 6.1单实例源库进行
数据
库升级 19.3的源库升级到19.13版本(包括打
数据
库补丁和ojvm补丁) 6.2.传输备份
文件
到目标库 传输备份
文件
到目标库的/home/oracle/bk目录 6.3.利用参数
文件
启动
数据
库到nomount 6.4.利用备份集恢复控制
文件
,并启动
数据
库到mount 6.5.通过restore database恢复
数据
库 注册目标库备份集到控制
文件
启动
数据
库到mount状态,确定recover database的序列号 6.6.recover database 通过rman 进行recover database 通过sql 命令行进行 recover database; 6.7.单实例
数据
库恢复完成后,配置为rac
数据
库 注册
数据
库到集群 修改
数据
库参数
文件
到asm 6.8.迁移rac
数据
库到rac
数据
库。 单实例
数据
库异机迁移到rac和,rac
数据
库异机迁移到rac有啥不一样。 根据上面理论,实施rac
数据
库异机恢复到rac7
数据
库本地恢复系列 7.1单实例
数据
库本地恢复 7.2rac
数据
库本地恢复8综合实战(uploading) 7.1实战课题: 有一台11.2.0.3的单实例
数据
库A,
数据
库容量有20T,无备份。 如何迁移到新搭建的rac环境B(
数据
库版本是19.13),并且是迁移到rac的pdb
数据
库中,并且rac
数据
库的asm容量只有21T. 这次实战包含的知识点。 1-如何在环境B复制
数据
库A的软件,最好进行复制,因为
数据
库A的11.2.0.3打了很多补丁,如果安装11.2.0.3软件,会造成版本不一致。 2-如何搭建11.2.0.3的单实例dg。 3-dg归档缺失如何解决。 4-如何升级11.2.0.3单实例到11.2.0.4单实例 5-如何升级11.2.0.4单实例到19.3单实例 6-如何升级19.3单实例到19.13单实例。 7-如何迁移19.13单实例
数据
库到19.13的rac的pdb
数据
库中。9
数据
库升级系列 8.1 单实例19c
数据
库升级到19.13版本。 8.2 单实例12.2.0.1
数据
库升级到19.13版本。 8.3 单实例12.1.0.2
数据
库升级到19.13版本。 8.4 19c
数据
库rac升级到19.13版本。
JAVA 上传下载JAVA代码
Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。
一个
流可以理解为
一个
数据
的序列。输入流表示从
一个
源读取
数据
,输出流表示向
一个
目标写
数据
。Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到
文件
传输和网络编程中。但本节讲述最基本的和流与 I/O 相关的功能。我们将通过
一个
个例子来学习这些功能。
3D图示Python标准自学教程基础篇(4)_
文件
处理
本套课程为Python基础篇的第4套课程,主要讲解python
文件
处理的系统知识体系。 首先讲解Python
文件
的概念以及常用读写函数open()、
Read
()、write()、close()以及
文件
读写访问标志。 其次讲解
文件
的典型应用
文件
的复制算法,以及with as 关键字简化资源关闭。本课程末尾讲解
文件
与目录的创建、删除、重命名、
文件
与目录的绝对路径与相对路径技术等。 课程末尾需要重点说明的是,本系列课程均设置课堂练习与课后作业集中讲解(录播形式),让初学者通过大量练习与阶段项目等手段有效强化学习效果,保证学习过程中的技能全面提升!教学特点: 使用大量(3D/2D)动画与图示方式,由浅入深讲解Python编程。配之海量课堂练习/课后作业的大量讲解,以及刘老师风趣幽默的课堂幽默感染力,让你轻松加愉悦的心情下开启Python系统学习之旅,系统与深入掌握当今最为火热的人工智能御用编程语言! 本Python教程分为入门、基础、中级、进阶篇,共15套教程组成。突出教学特点如下: 1:为弥补线下“互动性”与知识点的高“吸收率”,每套课程均设置“课堂练习”、“课后作业”、“阶段项目实战”、以及每个章节末尾的“课程笔记”整理环节,不断强化学员知识点的不断巩固与知识体系的梳理,不遗漏任何重要知识点。 以上四大自学环节设置,保证自学过程中知识的反复锤炼与全面吸收,最终获得优秀学习效果! 2:本Python系列课程(15套)从入门篇开始,完全从真正零基础开始讲起,特别适合中小学生以及大学非计算机专业的初学者开始入门! 3:大量采用3D/2D图形化示例讲解,对于Python抽象与复杂问题全部采用3D动画演示。 4:每套课程开始均设置“课程概述”: 讲解本套课程的前导课程、后续课程,以及本套课程的知识体系内容,帮助学习者更好的掌握课程的来龙去脉。 更多学习内容以图示方式供广大学员参考如下:
MMM 集群部署实现 MySQL 高可用和读写分离
Re: MMM 集群部署实现 MySQL 高可用和读写分离(Master-Master Replication Manager for MySQL)=================================================# 工作原理 MMM是Google的开源项目,主要用来监控mysql主主复制并做失败转移。其原理是将真实
数据
库节点的IP(RIP)映射为虚拟IP(VIP)集,在这个虚拟的IP集中,有
一个
专用于write的IP,多个用于
read
的IP,这个用于Write的VIP映射着
数据
库集群中的两台master的真实IP(RIP),以此来实现Failover的切换,其他
read
的VIP可以用来均衡读(balance)。 # 工作特点 稳定和成熟的开源产品,经过了时间的考验,核心技术是mysql自己的技术,只是使用脚本程序来控制,所以在原理上比较容易理解,而且管理能够更智能化。 安装简单,配置简单,使用简单 功能强大 (HA,failover,tools套件,cluster模式可以
一个
monitor管理多个mmm组)
《Linux系统编程、网络编程》第1章:
文件
IO
课程内容:什么是API,OS API与库API,open函数,
read
/write/close函数,lseek函数,进程表和
文件
描述符表,对
文件
进行共享操作,dup/dup2函数,fcntl函数
Linux/Unix社区
23,121
社区成员
74,507
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章