网络编程第二讲:利用winsock实现TCP编程.pdf
文本预览下载声明
网络编程 – 第二讲
利用winsock 实现TCP 编程
主要内容:
第一部分:socket 基础知识
1:与套接字地址相关的三种数据结构
2:套接字的三种类型
3:与字节序相关的转换函数
4 :与IP 地址相关的转换函数
第二部分:WinSock 编程基础
1:TCP 三次握手
2:CS 模式的TCP 通信过程
3:常用socket 函数
第三部分:基于TCP 的Socket 编程示例
1:编写TCPserver
2:编写TCPclient
网络编程 – 第二讲
第一部分
1:与套接字地址相关的三种数据结构
(1) 适用于各种通信域的socket 地址结构
问题:这样的结构体,每个结构体变量占多少字节?
(2) 专用于Internet 通信域的socket 地址结构
问题:这个地址结构和sockaddr 的区别?
若有某服务器的地址结构定义如下:
sockaddr_in serverAddr;
则怎样表示其端口号和IP 地址
(3) 专用于存储IP 地址的数据结构
网络编程 – 第二讲
问题:一个in_addr 类型的变量占多少字节?
怎样显示一个IP 地址,如””?
2: socket 的三种类型
(1) 流式套接字(SOCK_STREAM):提供了一个面向连接、可靠的数据传输服务,数
据无差错、无重复地发送,且按发送顺序接收。内设流量控制,避免数据流超限;数据被看
作是字节流,无长度限制。文件传送协议(FTP)即使用流式套接字。
(2) 数据报套接字(SOCK_DGRAM):提供了一个无连接服务。数据包以独立包形式
被发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。网络文件系统(NFS)
使用数据报式套接字。
(3) 原始套接字(SOCK_RAW):该接口允许对较低层协议,如 IP、ICMP 直接访问。
常用于检验新的协议实现或访问现有服务中配置的新设备。
3: 与字节序相关的转换函数
(1) 什么是字节序
网络编程 – 第二讲
多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。
(2) 两种字节序
大端格式:BE - Big Endian:低位数据存储在高地址
小端格式:LE –Little Endian:低位数据存储在低地址
对于0,01 是高位数据,04 是低位数据
1000-1003 是地址
LE (x86 ) BE (IBM3700)
04 1000 01 1000
03 1001 02 1001
02 1002 03 1002
01 1003 04 1003
(3) 为什么需要字节序转换
为了在不同字节序的主机之间实现数据通信,必须提供
一种能够被双方所能识别的字节序,因此TCP/IP 选择 BE 作
为网络数据的存储标准。
即LE 格式的主机数据在数据传输之前必须转换成BE 存
储格式,而从网络获取的数据也必须从BE 转换成LE
网络编程 – 第二讲
(4) 字节序转换函数
函数中h 表示host:主机字节序,n 表示net:网络字节序
htonl:将unsigned long 类型的host 字节序转换为net 字节序
ntohs:将unsigned short 类型的net 字节序转换为host 字节序
htonl()和ntohl()用于IP 地址的字节序转换
htons()和ntohs()用于端口号的字节序转换
问题:
已知:sockaddr_in serverAddr ;
若希望将该服务器地址的端口号设为300,怎么办?
显示全部