您现在的位置:首页 > 教案模板 > 正文

Linux SOCKET编程详解(2)

2019-07-23 07:05 网络整理 教案网

** 针对套接字的系统数据结构:**

1)、套接字API里有个函数socket,它就是用来创建一个套接字。套接字设计的总体思路是,单个系统调用就可以创建任何套接字,因为套接字是相当笼统的。一旦套接字创建后,应用程序还需要调用其他函数来指定具体细节。例如调用socket将创建一个新的描述符条目:

2)、虽然套接字的内部数据结构包含很多字段,但是系统创建套接字后,大多数字字段没有填写。应用程序创建套接字后在该套接字可以使用之前,必须调用其他的过程来填充这些字段。

3、文件描述符和文件指针的区别:

文件描述符:在linux系统中打开文件就会获得文件描述符,它是个很小的正整数。每个进程在PCB(Process Control Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针。

文件指针:C语言中使用文件指针做为I/O的句柄。文件指针指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括一个缓冲区和一个文件描述符。而文件描述符是文件描述符表的一个索引,因此从某种意义上说文件指针就是句柄的句柄(在Windows系统上,文件描述符被称作文件句柄)。

形象的理解,socket中tcp的编程,就像生活中打电话,你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以对话了。目前,电信公司已安装过滤软件,若有人通过ip电话拨打您家座机,通话结束挂上电话后,您的电话还会再响一声,接起后系统会提醒您刚才接到的是ip拨号,提醒您谨防上当。(电话铃声又响了,香走过去提起来就把它挂掉了,气呼呼地坐在椅子上)。

首先,请求端(客户端)发送一个包含syn标志的tcp报文,syn即同步(synchronize),同步报文会指明客户端使用的端口以及tcp连接的初始序号。1 如果在允许 nbt 的情况下连接服务器时,客户端会同时尝试访问 139 和 445 端口,如果 445 端口有响应,那么就发送 rst包给 139 端口断开连接,用 455 端口进行会话,当 445 端口无响应时,才使用 139 端口,如果两个端口都没有响应,则会话失败。如果客户已经消失,使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,则服务器将应远等待客户端的数据,保活功能就是试图在服务 器端检测到这种半开放的连接。

4.1、socket()函数

socket wsasocket( __in int af, __in int type, __in int protocol, __in lpwsaprotocol_info lpprotocolinfo, __in group g, __in dword dwflags)。socket socket(int af, int type, int protocol)。socket wsaapi socket( __in int af, __in int type, __in int protocol)。

sockfd是描述符。

socket函数对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字,而socket()用于创建一个socket描述符(socket descriptor),它唯一标识一个socket。这个socket描述字跟文件描述字一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。

正如可以给fopen的传入不同参数值,以打开不同的文件。创建socket的时候,也可以指定不同的参数创建不同的socket描述符,socket函数的三个参数分别为:

在局域网内我们的电脑和网关之间传输数据并不是通过ip地址,而是使用mac地址通信,而在一开始,我的电脑只知道网关的ip地址,而不知道网关的mac地址是多少,那么就使用arp协议,通过ip地址查询到网关的mac地址。af_inet域的通信地址本质上是计算机的ip地址和端口号,它们俩个都存储于本地计算机中,使用该域通信时,通信双方属于不同的计算机,不同的计算机可能会使用不同的存储方式来存储它们的ip地址和端口号,究竟使用大端方法还是小端方法,取决于计算机自身的硬件架构,不过有一点是可以确认的,那就是在通信过程中传输数据时使用的是大端方法。在 tcp/ip 协议中,网络层(通过ip地址识别通信方)封包完成交给下一层数据链路层(通过mac地址识别通信方)时,需要通过 arp 广播 获取目标 ip 对应的 mac 地址。

type:指定socket类型。常用的socket类型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等(socket的类型有哪些?)。

protocol:故名思意,就是指定协议。常用的协议有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议(这个协议我将会单独开篇讨论!)。

注意:并不是上面的type和protocol可以随意组合的,如SOCK_STREAM不可以跟IPPROTO_UDP组合。当protocol为0时,会自动选择type类型对应的默认协议。

如果没有cwnd 对象与这个句柄相连接,则返回nulldeletetempmapcwinapp的空闲处理函数自动调用这个函数,清除由fromhandle创建的任何临时cwnd对象getsafehwnd返回m_hwnd,如果该指针为null,则返回nullcreateex创建一个windows的可重叠窗口、弹出窗口或子窗口,并把它连接到一个cwnd对象上createcontrol创建一个ole控件,该控件在mfc程序中由一个cwnd对象代表。如果协议在后续的传送过程中出现网络错误的话,那么下一个socket函数就会返回socket_error(每一个除send的socket函数在执行的最开始总要先等待套接字的发送缓冲区中的数据被协议传递完毕才能继续,如果在等待时出现网络错误那么该socket函数就返回socket_error).在unix下,如果send在等待协议传送数据时网络断开,调用send的进程会接收到一个sigpipe信号,进程对该信号的处理是进程中止。只应该在onmessage消息处理函数内部调用default调用缺省的窗口过程,它提供了对应用程序没有处理的任何窗口消息的缺省处理pretranslatemessage在消息被发送到windows函数translatemessage和dispatchmessage之前,cwinapp使用这个函数来过滤窗口消息sendmessage向cwnd对象发送一个消息,直到这条消息被处理之后才返回postmessage将一条消息放入应用程序的消息队列,然后不等窗口处理这条消息直接返回sendnotifymessage将一条消息发送到窗口并尽快返回,返回的速度取决于该窗口是否是由调用线程所创建。

4.2、bind()函数

f是指向函数的指针变量,所以可把函数max()赋给f作为f的值,即把max()的入口地址赋给f,以后就可以用f来调用该函数,实际上f和max都指向同一个入口地址,不同就是f是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。步骤14. 3,遍历导入描述符中image_thunk_data数组中的每一项,获得导入函数的函数名或序号,调用windows api函数getprocaddress获取函数地址,再将该地址赋给 image_thunk_data 中的成员 function 。我们采用(0,f),(f,2f),(2f,4f)这样的倍频关系来考察函数族的频率特性,那么对应的时间波形就是倍数扩展(且包含调制---所以才有频 谱搬移)的一系列函数族。

socket()函数_linux socket函数参数_socket函数第三个参数

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

函数的三个参数分别为:

sockfd:即socket描述字,它是通过socket()函数创建了,唯一标识一个socket。bind()函数就是将给这个描述字绑定一个名字。

这里就说说在删除节点时要注意的地方,首先你要找到要删除的那个节点,然后把要删除节点的下一个节点的地址保存好(这里保存到pt),然后释放该节点的内存,让改指针指向null指针(这里因为马上要用到这个指针就没有让它指向null指针),接着让被删除节点的上一个的指针指向上面保存好的节点地址(也就是pt),这样节点被删除了,内存也释放了,链表也连接起来了。数组指针是指向数组首元素的地址的指针,其本质为指针(这个指针存放的是数组首地址的地址,相当于2级指针,这个指针不可移动)。从图1可以看到,head头结点指向第一个元素,第一个元素中的指针又指向第二个元素,第二个元素的指针又指向第三个元素的地址,第三个元素的指针就指向为空。

(2) 在跨域问题上,域仅仅通过url的首部来识别而不会尝试判断相同的ip地址对应的域或者两个域是否对应一个ip。dst host host 如果ipv4/v6 数据包的目的域是host, 则与此对应的条件表达式为真.host 可以是一个ip地址, 也可以是一个主机名. src host host 如果ipv4/v6 数据包的源域是host, 则与此对应的条件表达式为真. host 可以是一个ip地址, 也可以是一个主机名. host host。ason组网的网元数较少的情况下,采用单个ason域配置组网,对应规模较大的ason网络,一般通过分域的方式组网。

addrlen:对应的是地址的长度。

表示在一个 bind(2) 调用中对提供给它的地址使用的确认规则应该允许重复使用本地地址. 对于 pf_inet 套接字, 这表示该套接字可以绑定, 除非已有一个活跃的侦听套接口绑定到此地址上. 如果这个侦听套接字和一个指定端口绑定为 inaddr_any 时, 它就不能再绑定到任何本地地址的此端口.。3,譬如192,也可以防范局域网内的arp欺骗攻击,只要电脑连接了这台路由器、设定“ip与mac绑定”绑定每个mac地址的固定ip、dhcp服务器为所有的电脑分配ip地址根据获得的mac地址为这些电脑分配固定的ip地址。 webservice也一样,webservice客户端要调用一个webservice服务linux socket函数参数,首先要有知道这个服务的地址在哪,以及这个服务里有什么方法可以调用,所以,webservice务器端首先要通过一个wsdl文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法linux socket函数参数,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。

网络字节序与主机字节序

f4v 文件支持 big-endian 字节顺序的多字节整数,按照该顺序,最高有效字节在最低地址中最先出现。文件名或目录名用途cgi.cfg控制cgi访问的配置文件nagios.cfgnagios 主配置文件resource.cfg变量定义文件,又称为资源文件,在些文件中定义变量,以便由其他配置文件引用,如$user1$objectsobjects 是一个目录,在此目录下有很多配置文件模板,用于定义nagios 对象objects/commands.cfg命令定义配置文件,其中定义的命令可以被其他配置文件引用objects/contacts.cfg定义联系人和联系人组的配置文件objects/localhost.cfg定义监控本地主机的配置文件objects/printer.cfg定义监控打印机的一个配置文件模板,默认没有启用此文件objects/switch.cfg定义监控路由器的一个配置文件模板,默认没有启用此文件objects/templates.cfg定义主机和服务的一个模板配置文件,可以在其他配置文件中引用objects/timeperiods.cfg定义nagios 监控时间段的配置文件objects/windows.cfg监控windows 主机的一个配置文件模板,默认没有启用此文件。创建hosts.cfg文件来定义主机和主机组 创建services.cfg文件来定义服务 用默认的contacts.cfg文件来定义联系人和联系人组 用默认的commands.cfg文件来定义命令 用默认的timeperiods.cfg来定义监控时间段 用默认的templates.cfg文件作为资源引用文件。