互联网之移动网络编程复习.40P

上传人:ni****g 文档编号:506666410 上传时间:2024-03-13 格式:DOCX 页数:25 大小:86.35KB
返回 下载 相关 举报
互联网之移动网络编程复习.40P_第1页
第1页 / 共25页
互联网之移动网络编程复习.40P_第2页
第2页 / 共25页
互联网之移动网络编程复习.40P_第3页
第3页 / 共25页
互联网之移动网络编程复习.40P_第4页
第4页 / 共25页
互联网之移动网络编程复习.40P_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《互联网之移动网络编程复习.40P》由会员分享,可在线阅读,更多相关《互联网之移动网络编程复习.40P(25页珍藏版)》请在金锄头文库上搜索。

1、1、手机游戏简介及TCP/IP网络编程基础知识1)常用缩写:什么叫C/S、B/S、P2P?C/S(Client客户端/Server服务器)B/S(Browser浏览器/Server服务器)P2P(PeertoPeer)2) TCP/IP网络编程基础知识OSI(开放系统互连)模型与TCP/IP模型对比应用层:该层负责实际的应用程序细节,包括FTPHTTPSMTPTELNET传输层:主要为两台主机上的应用程序提供端到端的数据通信。主要有TCP/UDP两种传输模式。TCP/IP的核心部分是传输层协议网络层:负责主机间数据的路由和网络上数据的存储,有IP/ICMP/ARP/RARP。为ICMP,TCP

2、,UDP(UserDatagramProtocol用户数据报协议)提供分组发送服务。链路层(网络接口层):包括操作系统中的设备驱动程序和计算机中对应的网卡,他们一起处理传输媒介的物理接口细节。TCP(TransmissionControlProtocol传送控制协议)/IP协议:实际上就是在物联网上的一组完整的网络协议(TCP:提供传输层服务,IP:提供网络层服务)2、Socket概述和TCP通信程序设计1、Socket概述C/S通信模型一一不对称的模型TCP/IP模型TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中实现。因

3、此用户一般不涉及。2、什么是套接字/套接口(socket)?套接字,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。从网络整体来看,它是不同主机上应用程序之间的一个虚拟的接口,具有跨平台特性。从程序员角度来看,它是应用程序和网络设备的一个接口,特殊的I/O3、Berkeleysocket和WinSock的不同 Berkeleysocket是一个int数据类型,WinSockSock则是SOCKET数据类型 WinSock中以SOCKET_ERROR代表由错,BerkeleySock

4、et以-1代表由错 WinSock应用必须首先调用WSAStartup()初始化,并在结束前调用WSACleanup()释放资源,而BSDsocket不用。 WinSock使用closesocket中止一个连接,而BSDsocket使用close。4、Socket的分类字节流套接字(StreamSockets)面向连接的数据报套接字(DatagramSockets)无连接的原始套接字(RawSockets-只对Internet协议有效,用于直接访问IP协议5、不同操作系统中的SocketWindowsSocket(Winsock)LinuxSocket(BSDSocket)MacSocket(

5、BSDSocket)BSDSocket:需要使用的头文件一一数据类型:#include函数定义:#include6、IP地址与端口如果把IP数据包的投递过程看成是给远方的一位朋友寄一封信,那么IP地址就是这位朋友的所在位置,如:广州华软学院游戏戏(依靠此信息进行路由)端口号就是这位朋友的名字(依靠这个信息最终把这封信交付给这位收信)7、套接字的数据结构:通用的套接字地址结构structsockaddrunsignedshortsa_family;地址家族charsa_data14;/14字节协议地址;位于sys/socket.h文件中结构中sa_family为套接字的协议族地址类型,例如对于通

6、常的TCP/IP协议(IPv4),它的值是AF_INET;sa_data中存储着具体的协议地址,不同的协议族有不同的地址格式。sa_data的存储内容往往是包含地址和端口信息,而仅使用一个变量,所以使用起来不太方便。Sockaddr结构的并列形式structsockaddr_inshortintsin_family;通信类型unsignedshortintsin_port;端口,2bytesstructinaddrsin_addr;/Internet地址,4bytesunsignedcharsin_zero8;填充的空白信息,这样就保持整个结构与sockaddr结构的长度相同;其中,in_ad

7、dr结构定义如下struct?in_addr?unsignedlong?s_addr?;/*s_addr必须是网络字节顺序?Network?Byte?Order*/备注:sockaddr只是一个抽象的概述形式,并不实用。sockaddr_in更加结合了TCP/IP协议族的特点,易于使用,所以编程中常使用这个结构。但是:socket本身所封装的API都是支持sockaddr结构的,所以填充sockaddr_in结构需要强制转换成sockaddr结构,方可作为参数被socket的标准函数所使用。8、字节顺序主机字节顺序(HostByteOrder)低位在前,高位在后(little-endian)基

8、于Intel芯片的机器采取这种存储方式网络字节顺序(NetworkByteOrder)高位在前,低位在后(big-endian)sockaddr_in的变量成员(端口和地址)都必须使用网络字节顺序9、转换字节顺序的函数1R将IP地址转换为网络字节顺序inet_addrunsignedlonginet_addr(constchar*cp);将需要通信的IP地址转化为整数,并填充sockaddr_in的sin_addr成员inet_ntoachar*inet_ntoa(structin_addrin);例如将0A00A8C0转化为11、TCP网络通讯编程创建一个被动模式(server,服务器)的s

9、ocket.建立应用层的连接Client/Server交互在发送和接收数据之前一一client必须调用connect连接服务器server必须调用accept接收client的连接发送和接收数据.关闭连接.12、网络连接函数:socket创建套接字connect建立连接bind绑定本机端口listen监听端口accept接受连接recv,recvfrom数据接收send,sendto数据发送close,shutdown关闭套接字13、TCP客户服务器通信机制14基本套接字函数(1)-socket()基本套接字函数(2)-connect()基本套接字函数(2)-例子intfd;/*套接字描述符*

10、/structsockaddr_insrv;/*套接字地址结构*/*创建socket,调用函数socket,语句同前面socket的例子*/srv.sin_family=AF_INET;/*connect:AF_INET表示使用Internet地址族*/srv.sin_port=htons(8000);/*connect:目标是连向服务器的8000号端口*/srv.sin_addr.s_addr=inet_addr();/*connect:目标月艮务器的IPAddress是*/if(connect(fd,(structsockaddr*)&srv,sizeof(srv)0)fprintf(st

11、derr,“connecterror!n);exit(1);基本套接字函数(3)-bind()基本套接字函数(3)-例子intfd;/*套接字描述符*/structsockaddr_insrv;/*套接字地址结构*/*创建socket,调用函数socket,语句同前面socket的例子*/srv.sin_family=AF_INET;/*AF_INET表示使用Internet地址族*/srv.sin_port=htons(80);/*将socket绑定到80号端口*/srv.sin_addr.s_addr=htonl(INADDR_ANY);/*bind:INADDR_ANY表示服务器将接收来

12、自本机上任何一块网卡的客户连接*/if(bind(fd,(structsockaddr*)&srv,sizeof(srv)0)fprintf(stderr,“binderror!n);exit(1);基本套接字函数(4)-listen()基本套接字函数(4)-例子intfd;/*套接字描述符*/structsockaddr_insrv;/*usedbybind()*/*1)createthesocket*/*2)bindthesockettoaport*/if(listen(fd,20)0)fprintf(stderr,“listenerror!n);exit(1);基本套接字函数(5)-ac

13、cept()基本套接字函数(5)-例子structsockaddr_incli;/*usedbyaccept()*/intnewfd;/*用来存放accept返回的新的套接字*/intcli_len=sizeof(cli);/*usedbyaccept()*/*1)createthesocket*/*2)bindthesockettoaport*/*3)listenonthesocket*/newfd=accept(fd,(structsockaddr*)&cli,&cli_len);if(newfd0)fprintf(stderr,accepterrorn);exit(1);cli.sin_

14、addr.s_addr包含了客户的IP地址cli.sin_port包含了客户的端口数其他需要用到的函数intread(intfd,char*buf,intlen);返回实际接收的缓冲区大小intwrite(intfd,char*buf,intlen);返回实际发送的缓冲区大小intclose(intsockfd);成功返回0,否则返回-1recv()函数intrecv(SOCKETs,char*bytesToReceive,intnBytes,intflags);s是已经连接的SocketbytesToReceive指向用于接收数据的缓冲区的指针nBytes是缓冲区的字节数flags0,MSG

15、_DONTROUTE,orMSG_OOB当调用成功,recv()返回被接收的字节数;如果返回0,则说明连接已经被关闭;当调用失败,返回SOCKET_ERROR。注意:recv()并不保证接收到所有请求的数据。它实际接收的字节数由返回值指示。也许需要循环调用recv()来得到需要的结果。recv()的典型用法#defineBUFSIZE1024SOCKETs;charbufBUFSIZE;缓冲区intbytesRecv;/创建socket并连接服务器/.bytesRecv=recv(s,buf,BUFSIZE,0);if(bytesRecv=SOCKET_ERROR)printf(recv()调用错误:d,WSAGetLastError();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 网络生活

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号