互联网之移动网络编程复习_第1页
互联网之移动网络编程复习_第2页
互联网之移动网络编程复习_第3页
互联网之移动网络编程复习_第4页
互联网之移动网络编程复习_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、手机游戏简介及TCP/IP网络编程基础知识1C/、B/、P2?C/S(Client客户端/Server服务器)B/S(Browser浏览器/Server服务器)P2P(PeertoPeer)22TCP/IP网络编程基础知识OSI(开放系统互连)模型与TCP/IP模型对比应用层:该层负责实际的应用程序细节,包括FTPHTTPSMTPTELNET传输层:主要为两台主机上的应用程序提供端到端的数据通TCP/UDPTCP/IP的核心部分是传输层协议网络层:负责主机间数据的路由和网络上数据的存储,有IP/ICMP/ARP/RARPPUser TCn Conrol Proocol )/IPTCP2SocketTCP11Socket概述C/S——不称TCP/IPTCP/IP (TCP、UDP),网络层(IP)和物理接口,这三通常在操作系统内中实现。因此用户一般不涉及。2、什么是套接字/套接口(socket)?TCP/IPI/O3、BerkeleysocketWinSock的不同① Berkeley socket int 据类型n SockSockSOCKETk SOCKET_ERROR ,BerkeleySocket-1k)WSACleanup()BSDsocketkclosesocketBSDsocketclose。4、Socket的分类StreamSocket——面向的报DatagramSockets——无原RawSockets——只对Internet协议有效于直IP协议5、不同操作系统中的Socket——WindowsSocket(Winsock)——LinuxSocket(BSDSocket)——MacSocket(BSDSocket)BSDSocket:需要:#include函定义:#include6、IP地址与端口IP7、套接字的数据结构:① 通用套接结构structsockaddr{{unsigned short sa_family;建建Client/Server ——client 必须调connect 服务器server 必须调accept client.关闭.12、网络连接函数:socket 创套字connect bind 绑定本机端口listen 监听端口accept 受recv,recvfrom send,sendto close,shutdown 关闭套1313、TCP客户服务器通信机制14、基本套接字函数(1)-socket()函数(2)-connec()(2)- intfd; /* */structsockaddr_insrv; /* *//* socket, socket, socket*//*connectAF_INETInternet*/= htons(8000); /* connect: 8000 */= inet_addr(“ /* connect: Address “*/if(connect(fd,(structsockaddr*)&srv,sizeof(srv))<0){fprintf(stderr, ”connecterror!\n");exit(1);}(3)-bind()(3)- intfd; /* */structsockaddr_insrv; /* *//* socket, socket, socket*//*Internet*/=htons(80); /* socket80 */= htonl(INADDR_ANY); /* bind: INADDR_ANY */if(bind(fd,(structsockaddr*&srvsizeof(srv)0, bindexit(1);}(4)-listen()(4)- intfd; /* */structsockaddr_insrv; /*usedbybind()*//*1)createthesocket*//*2)bindthesockettoaport*/if(listen(fd,20)<0){, listenerror!\n");exit(1);}(5)-accept()(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(newfd<0){fprintf(stderr,"accepterror\n");exit(1);}了客户地址了客户端口数intread(intfd,char*buf,intlen);intwrite(intfd,char*buf,intlen);intclose(intsockfd);0, -1recv intrecv(SOCKETs,char*intintflags);sSocket于据针字节数flags0,MSG_DONTROUTE,orMSG_OOBrecv(0则回SOCKET_ERROR。并不保证到所有请求由值指示。也许需要循环recv()来得到需要结。recv()典型法#defineBUFSIZE1024SOCKETs;charbuf[BUFSIZE];.bytesRecv=recv(s,buf,BUFSIZE,0);if(bytesRecv==SOCKET_ERROR){printf("recv() 错误:%d",WSAGetLastError());}elseif(bytesRecv==0){printf("对方.");closesocket(s);}else{在TCP, connect(accept), , .在- socketintfd; /* */if((fd=socket(AF_INET,SOCK_DGRAM,0))<0){perror(“socket”);exit(1);} /* socket, 与类似*/bindrecvfromsendto1socketapi① gethostname()② IP地址(gethostbyname)③ inet_ntopinet_pton3、阻塞socket的缺省方式,也是最常用的方式,即调用结果返回之前,函数阻塞,当前线程会被挂起,suspend。可能造成阻塞的函数有:connect()、accept()、读写函数、gethostbyname()等。4sendrecvsendrecvsocket编程中两个核心的函数。send 表示发送数据,其实际上比不是直接将数据发送出sockettcpipsendrecv socketsocketrecv 5、非阻塞模式-1 errno EAGAINEWOULDBLOCK可01、知识回顾CC、靠、基于字节流层通信。2、面向连接的C/S程序工作流程(TCP)socket()bind()listen()accept()connect()求send()recv()()shutdown()socket()connect()bind()send()recv()close()3、U协议UDISO TCUDPIPPUDPTCPUDP应用环境UDP也可大型文件输。4、无连接UDP协议的Socket调用client/serverUDP通信5、无连接的C/S程序工作流程(UDP)无连接报输服务通信时客户端与服务器端所使用函是类似其工作流程如下:使socket()函创建套接口以确定协议类型调bind()函将创建套接口与本地地址绑定确定本地地址和本地端口号使sendto()函发或者使recvfrom()函接收数据close()、并发服务器——并发无并发服务器并发技术——多进程多线程IO多路复用、单进程非阻塞并发服务器常容器于对象有序集合(相当于是组NSSet?于对象无序集合于键值映射以上三种集合是不可变的(一旦初始化后,就不能改变)以下是对应的三种可变集合(这三种可变集合是对应上面 三 种 集 合 的 子 ) NSMutableArra?t?y只能收集cocoa(NSOjbect对象据(int,float,double,BOOL等,则需要将这些原始的CNSNumberNSNumber是cocoa8、关于阻塞的问题9、能引起阻塞的套接字调用accept()read()、recv()和recvfrom()write()、send()和sendto()connect()select()close()10、服务器实现非阻塞套接字设置()1、获取文件flags:??????flags=fcntl(fd,F_GETFL,0);2、设置文件的flags:??????fcntl(fd,F_SETFL,flags);3、增加文件的某个flags,比如文件是阻塞的,想设置成非阻塞:??????flags=fcntl(fd,F_GETFL,0);??????flags|=O_NONBLOCK;??????fcntl(fd,F_SETFL,flags);4、取消文件的某个flags,比如文件是非阻塞的,想设置成为阻塞:??????flags=fcntl(fd,F_GETFL,0);??????flags&=~O_NONBLOCK;?????fcntl(fd,F_SETFL,flags);也可调ioctl调用实现非阻塞设置服务器实现非阻塞fcntl 例子intflags;if((flags=fcntl(socketListen,F_GETFL,0))==-1){perror("fcntlF_GETFLfail:");exit(1);}flags|=O_NONBLOCK;if(fcntl(socketListen,F_SETFL,flags)==-1){perror("fcntlF_SETFLfail:");exit(1);}recvNSMutableSet*remove=[[NSMutableSetalloc]init];?for(NSNumber*objinsClientSet){charnewMsg[MSGSIZE];memset(newMsg,0,MSGSIZE);intintSocket=[objintValue];: , , 。父, 继承了父几乎所有属性。返回值:成功则对返回0,对父返回号,这也最方便区分父方法.若失败则返回-1给父,不成.利UNIX操作多并发执行序,可以创建。对每客户端,专门为它,通过个客户的服务.基本的编程框架是:父进程代码If((pid=fork())==0){…….子进程代码........}elseif(pid<0){报错信息}父进程代码12、多进程并发执行的服务器程序#import<Foundation/>#import <sys/> /*basicsystemdatatypes*/#import <sys/> /*basicsocketdefinitions*/#import <netinet/> /* and Internetdefns*/#import <arpa/> /*inet(3)functions*/?#defineMAXLINE1024?voidhandle(intconnfd);intmain(intargc,constchar*argv[]){NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];.

NSLog(@"Hello, World!");int listenfd,connfd;int serverPort=intlistenq=1024;pid_t childpid;charbuf[MAXLINE];socklen_tsocklen;structsockaddr_incliaddr,servaddr;socklen=sizeof(cliaddr);bzero(&servaddr,sizeof(servaddr));=AF_INET;=htonl(INADDR_ANY);=htons(serverPort);listenfd=socket(AF_INET,SOCK_STREAM,0);if(listenfd<0){perror("socketerror");return-1;}if(bind(listenfd,(structsockaddr*)&servaddr,socklen)<0){perror("binderror");return-1;}if(listen(listenfd,listenq)<0){perror("listenerror");return-1;}printf("serverstartup,listenonport:%d\n",serverPort);for(;;) {connfd = accept(listenfd, (struct sockaddr*)&cliaddr,&socklen);if(connfd<0){perror("accepterror");continue;}sprintf(buf,"acceptform%s:%d\n",

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论