zoukankan      html  css  js  c++  java
  • 网络通讯程序整理(一)

    一、三次握手原理

    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

    第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

    如下图所示:

    clip_image002

    图1-1 三次握手示意图

    完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:

    未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。

    Backlog参数:表示未连接队列的最大容纳数目。

    SYN-ACK 重传次数 服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。

    半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。

    二、需引入的库

    W32中C++编程,若使用到网络编程,需#include <winsock2.h>,然后在配置属性->输入->附加依赖项中加入Ws2_32.lib,这样,实际的工程中才能使用网络通信的API。

    三、必须调用的两个函数

    WSAStartup():为了在应用程序当中调用任何一个Winsock API函数,首先第一件事情就是必须通过WSAStartup函数完成对Winsock服务的初始化,因此需要调用WSAStartup函数。

    WSACleanup():当完成了Windows Sockets的使用后,应用程序或DLL必须调用WSACleanup()将其从Windows Sockets的实现中注销,并且该实现释放为应用程序或DLL分配的任何资源.

    四、一个简单服务器的实现

    1、初始化

    2、创建socket

    3、绑定到本地

    4、进行侦听

    5、等待连接

    6、进行通讯

    7、关闭连接

    8、清理资源

    五、一个简单客户端的实现

    1、初始化

    2、创建socket

    3、连接

    4、进行通讯

    5、关闭通讯

    6、清理资源

    附代码:https://files.cnblogs.com/luhouxiang/network_study.rar

  • 相关阅读:
    win10使用WampServer部署magento
    JavaScript的this详解
    jQuery的css
    jQuery.cssHooks
    jQuery属性
    jQuery选择器
    ajax中的stasus错误详解
    ajax
    js数组中的注意
    js的严格模式
  • 原文地址:https://www.cnblogs.com/luhouxiang/p/2337373.html
Copyright © 2011-2022 走看看