如何基于udp实现tcp协议栈

http://bbs.csdn.net/topics/280046868

使用套接字完成,按照tcp的方式在一个套接字里维持一个状态机。

//定义枚举:
enmu state{
CLOSED,//没有连接
SYN-SENT,//发送了syn,等代服务器ack
ACK_RECEIVE,//接到服务器ack
SYNACK_SEND,//恢复服务器的ack,确认
ESTABLISHED,//成功建立
}
//定义你自己的用udp连接函数
int newconnect( int sd, const struct sockaddr * sa, int namelen )
{
    int err = -1;
    int state = CLOSED;
    char ** buff[128] = {"syn","synack"};
    char buffrom[128];
    memset(buff,0,128);
    while(true)//开始状态机转换
        {
        if( state == ESTABLISHED )
            break;
        switch(state)
        {
            case CLOSED:
                err = sendto( sd, buff[0], strlen(buff[0]), 0, sa, namelen );
                if( err == SOCKET_ERROR )
                    goto error;
                state = SYN-SENT;
                break;
            case SYN-SENT:
                err = recvfrom( sd, buffrom, strlen(buffrom), sa, namelen );
                if( err == SOCKET_ERROR )
                    goto error;
                if( !strcmp(buffom,"ack",3) )
                    state = ACK_RECEIVE;
                break;
            case ACK_RECEIVE:
                err = sendto( sd, buff[1], strlen(buff[1]), 0, sa, namelen );
                if( err == SOCKET_ERROR )
                    goto error;
                state = ESTABLISHED:
                break;
            case ESTABLISHED:
                break;
            default:
                break;
        }

    }
    return sd;
err:
    closesocket(sd);
    return NULL;
}
时间: 2024-12-29 16:10:18

如何基于udp实现tcp协议栈的相关文章

通信协议之HTTP,UDP,TCP协议

1.UDP,TCP,HTTP之间的关系 tcp/ip是个协议组,它可以分为4个层次,即网路接口层,网络层,传输层,以及应用层, 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输层有TCP,UDP协议 而在应用层有HTTP,FTP,DNS等协议 因此HTTP本身就是一个协议,是从WEB服务器端传输超文本,到本地浏览器的一个传输协议 2.Socked协议 是为实现以上各个协议而建立的一个通信管道,实际上就是代表了客户端与服务器端的一个通信进程,双方都是通过指定的s

【TCP/IP网络编程】:06基于UDP的服务器端/客户端

本篇文章简单描述了UDP传输协议的工作原理及特点. 理解UDP UDP和TCP一样同属于TCP/IP协议栈的第二层,即传输层. UDP套接字的特点 UDP的工作方式类似于传统的信件邮寄过程.寄信前应先在信封上填好寄信人和收信人的地址,之后贴上邮票放进邮筒即可.当然信件邮寄过程可能会发生丢失,我们也无法随时知晓对方是否已收到信件.也就是说信件是一种不可靠的传输方式,同样的,UDP所提供的也是一种不可靠的数据传输方式(以信件类比UDP只是通信形式上一致性,之前也以电话通信的方式类比了TCP的通信方式

网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服务器进程B1同时为客户进程A1.A2和B2提供服务. Socket概述 ①   所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过“套接字”向网络发出请求或者应答网络请求. ②   Socket是连接运行在网络上的两个程序间的双向通信的端点. ③  

基于Socket的UDP和TCP编程介绍

一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(streamsocket)的一种. UDP:用户数据报协议.UDP是一种无连接协议.UDP套接口是数据报套接口(datagram socket)的一种. 二.TCP和UDP介绍 1)基本TCP客户—服务器程序设计基本框架 说明:(三路握手)         1.客户端发

基于 Socket 的 UDP 和 TCP 编程介绍

基于 Socket 的 UDP 和 TCP 编程介绍 一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(stream socket)的一种. UDP:用户数据报协议.UDP是一种无连接协议.UDP套接口是数据报套接口(datagram socket)的一种. 二.TCP和UDP介绍 1)基本TCP客户-服务器程序设计基本

socket 网络编程快速入门(二)教你编写基于UDP/TCP的服务端多线程通信

在上一篇博文中,我们介绍了利用socket进行简单的UDP/TCP的服务端和客户端的通信. (一) 在基于UDP的程序中,你有没有想过,如果我的这台主机在通讯的时候要求既能够收到别的主机发来的数据,又能够自己向目的主机发出数据,该怎样实现?也就是说需要两个while循环同时进行.答案是使用多线程,一个线程用于接受数据,另一个线程用来发送数据.接下来我们介绍WinSock的多线程编程. 多线程的实现我们使用_beginthread()函数: uintptr_t _beginthread( void

基于UDP协议模拟的一个TCP协议传输系统

TCP协议以可靠性出名,这其中包括三次握手建立连接,流控制和拥塞控制等技术. 我写的这个系统基于UDP协议模拟了一个TCP协议,所实现的功能如下: 1.三次握手 2.一个计时器,用来判断传输超时行为 3.快速重传 4.能处理不同的MSS(maximum segment size) 5.没有被接收方确认收到的包会被存在发送方,最大可以存MWS个(Maximum Window size) 6.能处理包丢失的情况 7.接收方一旦收到包,立刻发送确认信息给发送方 8.接收方的超时时间是固定的 9.接收方

TCP/IP网络编程 学习笔记_7 --基于UDP的服务端/客服端

理解UDP UDP套接字的特点:在笔记2中讲套接字类型有提,类似信件或邮件的传输.UDP在数据传输过程中可能丢失,如果只考虑可靠性,TCP的确比UDP好.但UDP在结构上比TCP更简洁.UDP没有ACK,SEQ那样的操作,因此,UDP的性能有时比TCP高出很多.编程中实现UDP也比TCP简单.另外,虽然UDP是不可靠的数据传输,但也不会像想象中那么频繁地发生数据丢失.因此,在更重视性能而非可靠性的情况下(如传输视频,音频时),UDP是一种很好的选择.而如果是传递压缩文件则必须要用TCP,因为压缩

基于socket的TCP和UDP编程

一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(STream socket)的一种. UDP:用户数据报协议.UDP是一种无连接协议.UDP套接口是数据报套接口(datagram Socket)的一种. 二.TCP和UDP介绍 1)基本TCP客户—服务器服务器 服务器是指在网络环境下运行相应的应用软件,为网上用户提供