• 基于TCP/UDP的socket编程


    基于TCP(面向连接)的socket编程
    服务器端顺序: 
    1. 创建套接字(socket) 
    2. 将套接字绑定到一个本地地址和端口上(bind) 
    3. 将套接字设为监听模式,准备接收客户请求(listen) 
    4. 等待客户请求的到来;当请求带来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept) 
    5. 用返回的套接字和客户端进行通信(send/recv) 
    6. 返回,等待另一个客户请求 
    7. 关闭套接字(closesocket)
    客户端程序: 
    1. 创建套接字(socket) 
    2. 向服务器发送连接请求(connect) 
    3. 和服务器端进行通信(send/recv) 
    4. 关闭套接字(closesocket)

    TCP建立连接的三次握手发生在socket的那几个函数中呢?请看下图:

    图1、socket中发送的TCP三次握手

    从图中可以看出,当客户端调用connect时,触发了连接请求,向服务器发送了SYN J包,这时connect进入阻塞状态;服务器监听到连接请求,即收到SYN J包,调用accept函数接收请求向客户端发送SYN K ,ACK J+1,这时accept进入阻塞状态;客户端收到服务器的SYN K ,ACK J+1之后,这时connect返回,并对SYN K进行确认;服务器收到ACK K+1时,accept返回,至此三次握手完毕,连接建立。

    总结:客户端的connect在三次握手的第二个次返回,而服务器端的accept在三次握手的第三次返回。

    基于UDP(面向无连接)的socket编程 
    服务器端(接收端)程序: 
    1. 创建套接字(socket) 
    2. 将套接字绑定到一个本地地址和端口上(bind) 
    3. 等待接收数据(recvfrom) 
    4. 关闭套接字(closesocket) 
    客户端(发送端)程序 
    1. 创建套接字(socket) 
    2. 向服务器发送数据(sendto) 
    3. 关闭套接字(closesocket)

    如何用UDP协议实现TCP协议?

    一点思路:使用UDP协议在数据包里添加TCP的头部使其能够实现TCP的基本功能,包括重传,滑动窗口,慢开始和拥塞控制,滑动窗口的大小可以通过命令行指定。即应用层再封装一个TCP报头,然后解析的时候在协议栈里面把偏移多偏几个字节。

    参考资料:

    [1] Linux Socket编程(不限Linux).
    http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html

    [2] 如何基于udp实现tcp协议栈?
    http://bbs.csdn.net/topics/280046868

  • 相关阅读:
    背包问题
    floyed算法
    读Windows编程
    PB串口编程资料(转)
    读TCP-IP详解卷1:协议(1)
    Oracle把两个空格以上的空格,替换为两个空格
    PB中multieditline空间的“~r~n"转"~n"
    PB中掉用Run以后,等Run的程序关闭以后才会执行后边的语句
    一个关于生成随机数的算法
    英语词根
  • 原文地址:https://www.cnblogs.com/mrsandstorm/p/5701683.html
Copyright © 2020-2023  润新知