第3章 基于TCPIP协议的网络编程new.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:127 大小:2.8MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

第3章 基于TCPIP协议的网络编程new.ppt

第3章基于TCPIP协议的网络编程new.ppt

预览

免费试读已结束,剩余 117 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

网络编程与开发技术第三章基于TCP/IP协议的网络编程§3.1TCP/IP概述§3.1TCP/IP概述§3.1TCP/IP概述§3.1TCP/IP概述§3.1TCP/IP概述§3.2协议简介§3.2.1IP协议§3.2.1IP协议§3.2.2传输层协议TCP报文段的格式§3.2.2传输层协议§3.2.3客户机/服务器模式§3.3地址与名字解析§3.3.1IP地址§3.3.1IP地址§3.3.1IP地址§3.3.2地址解析§3.3.3域名解析§3.4网间进程通信及端口号§3.4网间进程通信及端口号§3.5Winsock基本概念§3.5Winsock基本概念§3.5Winsock基本概念§3.5Winsock基本概念§3.5Winsock基本概念§3.5Winsock基本概念§3.5Winsock基本概念§3.5Winsock基本概念§3.5Winsock基本概念§3.6常用Winsock函数§3.6.1Winsock初始化函数§3.6.1Winsock初始化函数§3.6.2基本Winsock函数§3.6.2基本Winsock函数§3.6.2基本Winsock函数一般情况下另一个与该地址结构大小相同的sockaddr_in结构更为常用,sockaddr_in结构用来标识TCP/IP协议下的地址。Sockaddr_in的结构定义如下:structsockaddr_in{shortsin_family;u_shortsin_port;//16位端口号,网络字节顺序structin_addrsin_addr;//32位IP地址,网络字节顺序charsin_zero[8];}sin_family:必须设为AF_INET,表示该socket处于Internet域。sin_port:用于指定服务端口,在选择服务端口时必须特别小心,因为有些可用端口已为固定的服务保留。如果把端口号设为0,则Winsock将为应用程序分配一个在1024——5000之间的端口值。sin_addr:用于把一个IP地址保存为一个4字节的数,是无符号整数类型。sin_addr结构体中只有一个唯一的字段s_addr,表示IP地址,该字段是一个整数,一般用函数inet_addr()把字符串形式的IP地址转换成unsignedlong型的整数值后再置给s_addr。sin_zero:填充项,使sockaddr_in结构和sockaddr结构的长度一样。§3.6.2基本Winsock函数举例说明如何在一个TCP连接上进行套接字绑定:SOCKETs;Structsockaddr_intcpaddr;intport=5150;intnSockErr;s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);tcpaddr.sin_family=AF_INET;tcpaddr_sin_port=htons(port);tcpaddr.sin_addr.s_addr=htonl(INADDR_ANY);//调用bind函数分配地址if(bind(s,(SOCKADDR*)&tcpaddr,sizeof(tcpaddr))==SOCKET_ERROR)nSockErr=WSAGetLastError();//处理错误本例中,先创建了一个套接字,然后设置了IP地址,最后把套接字绑定到默认IP地址的5150端口上。IP地址为常量INADDR_ANY,就是指定地址为0.0.0.0的地址,这个地址表示不确定地址,或“所有地址”、“任意地址”。一般来说,在各个系统中均定义成为0值。表示允许服务进程监听主机上面每个网络接口上的客户机活动。§3.6.2基本Winsock函数§3.6.2基本Winsock函数例:accept()的调用过程。SOCKETsServSock;sockaddr_inaddr;intnSockErr,nNumConns;SOCKETsConns[5];sockaddrConnaddrs[5];intnAddrLen=sizeof(sockaddr);sServSock=socket(AF_INET,SOCK_STREAM,0);//建立socket对象addr.sin_family=AF_INET;addr.sin_port=htons(5050);//为socket分配端口addr.sin_addr.s_addr=htonl(INADDR_ANY);if(bind(sServSock,(LPSOCKADDR)&addr,sizeof(addr))==SOCKET_ERROR){nSockErr=WSAGetLastError();return;//Handleerror,Donotc