1 / 21
文档名称:

网络编程3.doc

格式:doc   大小:107KB   页数:21页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

网络编程3.doc

上传人:cjrl214 2019/3/19 文件大小:107 KB

下载得到文件列表

网络编程3.doc

相关文档

文档介绍

文档介绍:(一)作者:肖进Socket(套接字)◆先看定义:typedefunsignedintu_int;typedefu_intSOCKET;◆Socket相当于进行网络通信两端的插座,只要对方的Socket和自己的Socket有通信联接,双方就可以发送和接收数据了。其定义类似于文件句柄的定义。◆Socket有五种不同的类型:1、流式套接字(streamsocket)定义:#defineSOCK_STREAM1 流式套接字提供了双向、有序的、无重复的以及无记录边界的数据流服务,适合处理大量数据。它是面向联结的,必须建立数据传输链路,同时还必须对传输的数据进行验证,确保数据的准确性。因此,系统开销较大。2、数据报套接字(datagramsocket)定义:#defineSOCK_DGRAM2 数据报套接字也支持双向的数据流,但不保证传输数据的准确性,但保留了记录边界。由于数据报套接字是无联接的,例如广播时的联接,所以并不保证接收端是否正在侦听。数据报套接字传输效率比较高。3、原始套接字(raw-protocolinterface)定义:#defineSOCK_RAW3 原始套接字保存了数据包中的完整IP头,前面两种套接字只能收到用户数据。因此可以通过原始套接字对数据进行分析。其它两种套接字不常用,这里就不介绍了。◆Socket开发所必须需要的文件():头文件:::、数据类型的基本定义:这个大家一看就懂。typedefunsignedcharu_char;typedefunsignedshortu_short;typedefunsignedintu_int;typedefunsignedlongu_long;2、网络地址的数据结构,有一个老的和一个新的的,请大家留意,如果想知道为什么,请发邮件给BillGate。其实就是计算机的IP地址,不过一般不用用点分开的IP地址,当然也提供一些转换函数。◆旧的网络地址结构的定义,为一个4字节的联合:structin_addr{union{struct{u_chars_b1,s_b2,s_b3,s_b4;}S_un_b;struct{u_shorts_w1,s_w2;}S_un_w;u_longS_addr;}S_un;#/*canbeusedformosttcp&ipcode*///下面几行省略,反正没什么用处。};其实完全不用这么麻烦,请看下面:◆新的网络地址结构的定义:非常简单,就是一个无符号长整数unsignedlong。举个例子:?请看定义:#defineINADDR_LOOPBACK0x7f0000013、套接字地址结构(1)、sockaddr结构:structsockaddr{u_shortsa_family;/*addressfamily*/charsa_data[14];/*upto14bytesofdirectaddress*/};sa_family为网络地址类型,,域中进行通信,该地址结构随选择的协议的不同而变化,因此一般情况下另一个与该地址结构大小相同的sockaddr_in结构更为常用,sockaddr_in结构用来标识TCP/IP协议下的地址。换句话说,这个结构是通用socket地址结构,域的socket地址结构。(2)、sockaddr_in结构structsockaddr_in{shortsin_family;u_shortsin_port;structin_addrsin_addr;charsin_zero[8];};sin_family为网络地址类型,。sin_port为服务端口,注意不要使用已固定的服务端口,如HTTP的端口80等。如果端口设置为0,则系统会自动分配一个唯一端口。sin_addr为一个unsignedlong的IP地址。sin_zero为填充字段,纯粹用来保证结构的大小。◆将常用的用点分开的IP地址转换为unsignedlong类型的IP地址的函数:_addr(constcharFAR*cp)用法:unsignedlongaddr=inet_addr("")◆如果将sin_addr设置为INADDR_ANY,则表示所有的IP地址,也即所有的计算机。#defineINADDR_ANY(u_long)0x000000004、主机地址:先看定义:structhostent{charFAR*h_name;/*officialnameofhost*/charFAR*FAR*h_aliases;/*alia