文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发C/C++TCP/IP编程实现远程文件传输
精品推荐
特别推荐
·C语言编程易犯毛病集合
·C语言编程常见问题解答(目录)
·C#程序开发中的常用函数汇总
·C/C++笔试、面试题目大汇总
·Beej的网络socket编程指南
·socket编程原理
·C语言的常用库函数使用方法分析及用途
·在C语言中如何处理时间和日期
·C++设计模式之Singleton
·VC++动态链接库编程之MFC扩展 DLL
·TCP/IP网络重复型服务器通信软件的设计
·DirectX游戏开发入门
·经典与现代的结合:在MFC中集成RAD .NET框架
·Windows API-GDI入门基础知识详解(2)
·Visual C++ 入门精解
·C#基础概念二十五问
·用C#实现pdf文件的完整性验证
·成为嵌入式程序员应知道的0x10个问题
·TCP/IP编程实现远程文件传输
·几个C#编程的小技巧
热点TOP10
·学生成绩管理系统实习
·C#编写的windows计算器-源代码
·socket编程原理
·飞机订票系统设计
·C/C++笔试、面试题目大汇总
·TCP/IP编程实现远程文件传输
·C语言图形函数
·Visual C++ 实现数字化图像的分割
·改编 的 C版 职工管理系统
·C#基础概念二十五问
·C语言的常用库函数使用方法分析及用途
·C#源码读取excel数据到程序中-SQL SERVER-到dataset中
·用C语言实现Ping程序功能
·C# GridView 排序及分页
·进程调度模拟程序
·Windows下C语言网络编程快速入门
·通讯录的源代码(用链表实现)
·DirectX游戏开发入门
·在Visual Studio.NET中使用Crystal Report(上)
·asp.net中调用javascript函数实现多功能日期控件示例

TCP/IP编程实现远程文件传输

日期:2007年5月11日 作者: 查看:[大字体 中字体 小字体]


在TCP/IP网络结构中,为了保证网络安全,网络人员往往需要在路由器上添加防火墙,禁止非法用户用ftp等安全危害较大的TCP/IP协议访问主机。而有时系统维护人员需要用ftp将一些文件从中心机房主机传到前端网点主机上,比如应用程序的替换升级。如果每次传输文件时都要打开防火墙,未免显得有些繁琐,要是在自己的应用程序中增加一个专门的文件传输模块,那将是十分愉快的事情。

  UNIX网络程序设计一般都采用套接字(socket)系统调用。针对目前十分流行的客户/服务器模式,其程序编写步骤如下:
  1.Socket系统调用
  为了进行网络I/O,服务器和客户机两端的UNIX进程要做的第一件事是调用socket()系统调用,建立软插座,指明合适的通讯协议。格式为:
  #include >sys/types.h>
  #include >sys/socket.h>
  int socket(int family,int type,int protocol)
  其中:(1)family指明套节字族,其值包括:
  AF_UNIX   (UNIX内部协议族)
  AF_INET   (Iternet协议)
  AF_NS (XeroxNs协议,TCP/IP编程取该值)
  AF_IMPLINK  (IMP链接层)
  (2)type 指明套接字类型,取值有:
  SOCK_STREAM     (流套接字)
  SOCK_DGRAM     (数据报套接字)
  SOCK_RAW      (原始套接字)
  SOCK_SEQPACKET   (定序分组套接字)
  一般情况下,前两个参数的组合就可以决定所使用的协议,这时第三个参数被置为0,如果第一个参数为AF_INET,第二个参数选SOCK_STREAM,则使用的协议为TCP;第二个参数选SOCK_DGRAM,则使用的协议为UDP;当第二个参数选SOCK_RAW时,使用的协议为IP。值得指出的是并不是所有的族和类型的组合都是合法的,具体请查阅相关资料。该系统调用若成功则返回一个类似文件描述符,成为套节字描述字,可以像文件描述符那样用read和write对其进行I/O操作。当一个进程使用完该软插座时,需用close(<描述符>)关闭(具体见后面内容)。
  2.服务器端Bind系统调用
  软插座创建时并没有与任何地址相关联,必须用bind()系统调用为其建立地址联系。其格式为:
  #include <sys/types.h>
  #include <sys/socket.h>
  int bind(int socketfd,struct sockaddr_in *localaddr,sizeof(localaddr));
  其中:(1)第一个参数socketfd是前步socket()系统调用返回的套节字描述符。
  (2)第二个参数被捆向本地地址的一种结构,该结构在sys/netinet/in.h中定义:
  struct sockaddr_in{
   short sin_family;/*socket()系统调用的协议族如AF_INET*/
   u_short sin_port;/*网络字节次序形式的端口号码*/
   struct in_addr sin_addr;/*网络字节次序形式的网络地址*/
   char sin_zero[8];
  }
  一台机器上的每个网络程序使用一个各自独立的端口号码,例如:telnet程序使用端口号23,而ftp文件传输程序使用端口号21。我们在设计应用程序时,端口号码可以由getservbyname()函数从/etc/services库文件中获取,也可以由htons (int portnum)函数将任意正整数转换为网络字节次序形式来得到,有些版本的UNIX操作系统则规定1024以下的端口号码只可被超级用户使用,普通用户程序使用的端口号码只限于1025到32767之间。网络地址可以由gethostbyname(char*hostname)函数得到(该函数和getservbyname()一样都以网络字节次序形式返回所有在他们结构中的数据),参数hostname为/etc/hosts文件中某一网络地址所对应的机器名。该函数返回一个类型为hostent的结构指针,hostent结构在netdb.h中定义:
  struct hostent{
   char *h_name;
   char **h_aliases;
   int h_addrtype;
   int h_length;  /*地址长度*/
   char **h_addr_list;
   #define h_addr h_addr_list[0];/*地址*/
  }
  (3)第三个参数为第二个结构参数的长度,如果调用成功,bind返回0,否则将返回-1并设置errno。
  3.服务器端系统调用listen,使服务器愿意接受连接
  格式:int listen(int socketfd,int backlong)
  它通常在socket和bind调用后在accept调用前执行。第二个参数指明在等待服务器执行accept调用时系统可以排队多少个连接要求。此参数常指定为5,也是目前允许的最大值。
  4.服务器调用accept,以等待客户机调用connect进行连接。格式如下:
  int newsocket=(int socketfd,struct sockaddr_in *peer,int*addrlen);
  该调用取得队列上的第一个连接请求并建立一个具有与sockfd相同特性的套节字。如果没有等待的连接请求,此调用阻塞调用者直到一连接请求到达。连接成功后,该调用将用对端的地址结构和地址长度填充参数peer和addlen,如果对客户端的地址信息不感兴趣,这两个参数用0代替。

[1] [2] [3] 下一页 




上一篇:Linux 下 C++程序的异常处理技巧

下一篇:在C语言中如何处理时间和日期

TCP/IP编程实现远程文件传输 相关文章:
·“黑客”教你如何远程控制计算机
·MPEG、RM、WMV电影文件格式转换指南
·如何实现局域网打印机共享
·socket编程原理
·清除垃圾文件DIY
·怎样清除硬盘及系统垃圾文件?
·揭秘远程破解盗窃QQ密码的各种方法
·ASP.NET上传文件的实例
·Windows黑客编程基础
·TCP/IP编程实现远程文件传输
TCP/IP编程实现远程文件传输 相关软件:
·最强文件加密锁2007
·巨城文件保险柜 v2.3
·Ultra RM Converter(Real文件转换分割,合并)V3.3.0916 汉化版
·Allok Video Splitter(视频文件分割)V2.2 0726 修正II版
·联想OEM Winxp的5个文件
·C++编程思想
·文件夹加密器V9.6
·TCP-IP详解卷2:实现
·shell编程和unix命令
·西门子plc软件及教程 文件类型 其它介绍

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot