码迷,mamicode.com
首页 > 其他好文 > 详细

如何基于udp实现tcp协议栈

时间:2014-09-06 19:56:13      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   使用   ar   div   sp   

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;
                breakcase 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;
}

 

如何基于udp实现tcp协议栈

标签:style   blog   http   color   os   使用   ar   div   sp   

原文地址:http://www.cnblogs.com/ljygoodgoodstudydaydayup/p/3959683.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!