Linux-网络通信编程.ppt

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

Linux 操作系统与程序设计 软件工程系 何海涛 内容 几个概念 进程通信: 单机:进程之间交换信息(通过pipe,signal等) 网络:不同计算机(软/硬件)之间的信息交换--最终,仍是进程通信 需要解决的问题 进程标识 协议 差错控制、流量控制、报文顺序、连接管理 ...... 解决方案 TCP/IP 协议 + Socket 编程机制 服务和端口 编写网络通信程序 TCP/IP协议制定了通信双方通信的细节:如数据包的格式,建立连接的形式等 协议的实现在每个系统上是不一样的,而且协议很复杂,具体实现用到了成百上千个函数和无数的结构体,即使程序员知道了协议细则,要直接调用协议中各种函数完成一个网络通信程序是很困难的 如何简化: 把协议“封装”的简单一点,如同打电话 Socket接口 socket:套接字,是一组接口,使得编写网络通信程序,如同打电话般简单 Socket的英文原义是“孔”或“插座”: 一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。 socket编程和打电话 socket实例 网络通信涉及到2台电脑 如果是C/S模式:一台作为“服务器”,一台为“客户机” 也可以对等P2P:地位平等 服务器:提供服务 接受客户端的连接 响应客户端的要求 给客户端发消息 客户端: 向服务器发送请求 从服务器收取消息 socket实例 服务器程序先运行,等待客户端请求/消息到来 客户端向服务器发送一个字符串hello 服务器在终端输出客户端发来的字符串 最简单的UDP服务器udps.c 最简单的UDP客户端 udpc.c 编译运行 同一台电脑,打开2个终端 分别编译运行服务器程序和客户端程序 注意:不能不指定输出的可执行文件名,必须使用-o 参数,否则,两个程序默认的可执行文件都是a.out,会冲突 不同的计算机之间需要服务器的IP地址 客户端程序中修改IP地址 使用命令 ifconfig 查看本机的IP地址 基本socket API socket() 创建一个套接字, #include sys/socket.h 函数原型:int socket(int domain, int type, int protocol); 参数说明 domain:通信协议族,即地址族,通常是 AF_INET(TCP/IP(V4)) type:套接字类型 SOCK_STREAM:TCP协议 SOCK_DGRAM:UDP协议 SOCK_RAW:原始套接字 protocol:通信协议,设置为0 ,由内核根据指定的类型和协议族使用默认的协议 返回值: 成功时,返回一个大于等于0的文件描述符:可以用文件读写函数来操作socket 失败时,返回一个小于0的值 关闭: close(socketfd) 类似于关闭文件,回收资源 地址的表示---sockaddr_in结构体 sockaddr_in结构体 初始化结构体 字节顺序 不同的CPU有不同的字节顺序类型,这些字节顺序类型指的是整数在内存中保存的顺序,即主机字节顺序(HBO,Host Byte Order)常见的有两种: 大端模式(big-endian):地址的高位存储值的低位,如部分MIPS,POWERPC机器 小端模式(little-endian):地址的低位存储值的低位,如Intelx86机器 指定服务器端口号 (1). HTTP协议代理服务器常用端口号:80/8080/3128/8081/9080 (2). SOCKS代理协议服务器常用端口号:1080 (3). FTP(文件传输)协议代理服务器常用端口号:21 (4). Telnet(远程登录)协议代理服务器常用端口:23 (5). SMTP/POP3: 25/110 小于256的端口作为保留端口 通常自己指定的端口号可以大于1024 绑定bind Linux下一切皆文件 发送和接受网络数据,也是通过读写文件完成 这里的文件,指的是socket。为了实现网络通信的目标,还需要把socket文件和IP地址,端口号等绑定(关联)起来。 bind()函数 int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen); 参数说明 sockfd:调用socket返回的文件描述符 my_addr:保存地址信息(IP地址和端口) addrlen:设置为 sizeof(struct sockaddr) 返回值 成功时,返回0 失败时,返回-1(如端口被占用) 接收网络信息 一切就绪,等待从网络来的消息(读socket文件) int re

文档评论(0)

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

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

1亿VIP精品文档

相关文档