网站大量收购独家精品文档,联系QQ:2885784924

基于Socket的程序设计.ppt

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于Socket的程序设计

基于Socket的程序设计 网络编程部分: TCP通信程序设计 UDP通信程序设计 实验目的 掌握客户/服务器(C/S)应用的工作方式 初步掌握用C语言设计网络通信程序 学习和区别TCP/UDP不同的通信机制 C/S通信模型——不对称的模型 编程语言和环境 语言 C/C++/C#/Perl/Java… 基础是掌握C语言编程 Windows MS Visual系列 VC/VB/VS.NET Borland系列 Delphi /BCB(C++ Builder) Linux 编辑器vi+编译器GCC 什么是套接字/套接口(socket)? 从网络整体来看,它是不同主机上应用程序之间的一个虚拟的接口,具有跨平台特性。 从程序员角度来看,它是应用程序和网络设备的一个接口,特殊的I/O Where are we? TCP/IP模型 Socket的产生和发展 Socket的起源 最初在70年代由加州大学Berkeley分校开发,其目的是为BSD(Berkeley Software Distribution) UNIX 4.1版操作系统提供网络通信接口。 Socket在各种平台下的发展 随着Berkeley Sockets的广泛应用,九十年代初,Sun、MS等公司共同制定了适应dos和win平台的windows sockets的规范(WinSock) Sun Microsystems为Java也制定了网络通信的API Linux下的socket继承了BSD sockets的风格,并有所改动 Sockets-Let’s go further! 在UNIX/Linux中,套接口是一种类型的文件 文件描述符只是一个和打开的文件相关联的整数。 套接口描述符(socket descriptor)可以由socket()等函数创建,返回文件描述符 可以使用read()、write()等典型的文件操作函数对其读写操作,也可以使用send()、recv()等套接口操作函数控制数据收发。 不同的网络有不同的套接口 CCITT X.25套接口 Berkeley 套接口 网络通信最重要的两个参数 IP地址/域名 可用gethostbyaddr和getaddrbyhost函数相互转换。 端口号 端口号用以区别不同的应用,RFC1700规定了由IANA(因特网已分配数值权威机构)定义的端口列表,端口号分三段: 周知端口:0~1023,由IANA分配和控制,对普通用户不可用 经注册的端口:1024~49151,不受IANA控制,但由IANA登记并提供它们的使用情况清单 动态或私用端口:49152~65535,IANA不管的端口,也称临时端口。 理论上来说,我们编程能使用的端口值为1024~65535,周知端口的使用需要超级用户(root)权限。 Socket的分类 字节流套接口(Stream Sockets) 面向连接的 数据报套接口(Datagram Sockets) 无连接的 原始套接口(Raw Sockets) 只对Internet协议有效,用于直接访问IP协议 套接口的数据结构(1) 套接口的数据结构(2) Linux下两个结构的比较 两种结构的关系 sockaddr只是一个抽象的概况形式,并不实用 sockaddr_in更加结合了TCP/IP协议族的特点,易于使用,所以编程中常使用这个结构。 但是:socket本身所封装的API都是支持sockaddr结构的,所以填充sockaddr_in结构需要强制转换成sockaddr结构,方可作为参数被socket的标准函数所使用。 字节顺序 主机字节顺序(Host Byte Order) 低位在前,高位在后(little-endian) 基于Intel芯片的机器采取这种存储方式 网络字节顺序(Network Byte Order) 高位在前,低位在后(big-endian) sockaddr_in的变量成员(端口和地址)都必须使用网络字节顺序 转换字节顺序的函数 将IP地址转换为网络字节顺序 inet_aton int inet_aton(const char *cp, struct in_addr *inp); 例如将“192.168.0.10”?0A00A8C0 inet_addr unsigned long inet_addr(const char *cp); 功能同上,但不能处理广播地址 inet_ntoa char * inet_ntoa(struct in_addr in); 例如将0A00A8C0转化为“192.168.3.10” 在我们的实验中,使用前两者中的任何一个都可以,将需要通信的IP地址转化为整数,并填充sockaddr_in的sin_addr成员 Part 2. TCP

文档评论(0)

zhuliyan1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档