socket网络开发

socket网络开发

ID:26887819

大小:395.51 KB

页数:22页

时间:2018-11-29

socket网络开发_第1页
socket网络开发_第2页
socket网络开发_第3页
socket网络开发_第4页
socket网络开发_第5页
资源描述:

《socket网络开发》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第八章Socket网络开发目标什么是套接字?Internet套接字的两种类型网络理论IP地址和如何处理它们使用Socket开发网络程序什么是socket?所谓socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。生成套接字,主要有3个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。Socket原意是“插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现

2、数据传输的并发服务。Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。套接字的两种类型一种是“StreamSockets”(流格式),另外一种是“DatagramSockets”(数据包格式)。我们以后谈到它们的时候也会用到SOCK_STREAM和SOCK_DGRAM。数据报套接字有时也叫“无连接套接字”(如果你确实要连接的时候可以用connect()。)流式套接字是可靠的双向通讯的数据流。如果你向套接字按顺序输出“1,2”,那

3、么它们将按顺序“1,2”到达另一边。它们是无错误的传递的,除非自己的控制错误。例如:telnet、http及ftp等都是使用流格式,这是因为它使用了“传输控制协议(TheTransmissionControlProtocol)”。流式套接字可以达到高质量的数据传输。网络理论网络分层模型(LayeredNetworkModel)。现在列出整个层次模型。如果你要参加网络考试,可一定要记住:  应用层(Application)表示层(Presentation)会话层(Session)传输层(Transport)网络层(Network)数据链路层(DataLin

4、k)物理层(Physical)物理层是硬件(串口,以太网等等)。应用层是和硬件层相隔最远的--它是用户和网络交互的地方。 这个模型如此通用,如果你想,你可以把它作为修车指南。把它对应到Unix,结果是: 应用层(ApplicationLayer)(telnet,ftp,等等)传输层(Host-to-HostTransportLayer)(TCP,UDP) Internet层(InternetLayer)(IP和路由)网络访问层(NetworkAccessLayer) (网络层,数据链路层和物理层)网络数据排列有两种字节排列顺序:重要的字节(有时叫“oct

5、et”,即八位位组)在前面,或者不重要的字节在前面。前一种叫“网络字节顺序(NetworkByteOrder)”。有些机器在内部是按照这个顺序储存数据,而另外一些则不然。当我说某数据必须按照NBO顺序,那么你要调用函数(例如htons())来将它从本机字节顺序(HostByteOrder)转换过来。如果我没有提到NBO,那么就让它保持本机字节顺序。Socket数据类型socket描述符:仅仅是一个常见的int。套接字地址信息structsockaddr{  unsignedshortsa_family;/*地址家族,AF_xxx*/  charsa_da

6、ta[14];/*14字节协议地址*/ };sa_family能够是各种各样的类型,但是在这篇文章中都是"AF_INET"。sa_data包含套接字中的目标地址和端口信息。为了处理structsockaddr,程序员创造了一个并列的结构:structsockaddr_in("in"代表"Internet"。)structsockaddr_in{  shortintsin_family;/*通信类型*/  unsignedshortintsin_port;/*端口*/structin_addrsin_addr;/*Internet地址*/  unsigne

7、dcharsin_zero[8];/*与sockaddr结构的长度相同*/};IP地址如何处理假设你已经有了一个sockaddr_in结构体ina,你有一个IP地址"132.241.5.10"要储存在其中,你就要用到函数inet_addr(),将IP地址从点数格式转换成无符号长整型。使用方法如下:ina.sin_addr.s_addr=inet_addr("132.241.5.10");好了,现在你可以将IP地址转换成长整型了。有没有其相反的方法呢?它可以将一个in_addr结构体输出成点数格式?这样的话,你就要用到函数inet_ntoa()("ntoa

8、"的含义是"networktoascii"),就像这样:printf("%s",

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。