如何基于udp实现tcp协议栈
2014-09-06 18:52
204 查看
http://bbs.csdn.net/topics/280046868
使用套接字完成,按照tcp的方式在一个套接字里维持一个状态机。
使用套接字完成,按照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; }
相关文章推荐
- 如何实现基于UDP的socket的通信
- [导入]如何使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证
- 在ASP.NET中如何用C#.NET实现基于表单的验证
- 在ASP.NET中如何用C#.NET实现基于表单的验证
- 在ASP.NET中如何用C#.NET实现基于表单的验证
- 如何使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证
- 基于混合TCP-UDP的HTTP协议实现方法
- 在ASP.NET中如何用C#.NET实现基于表单的验证
- 在ASP.NET中如何用C#.NET实现基于表单的验证
- 如何设计数据库表实现完整的RBAC(基于角色权限控制)
- 基于MonoRail 的Web程序如何实现更换模板
- 在ASP.NET中如何用C#.NET实现基于表单的验证
- 如何调用DLL (基于Visual C++6.0的DLL编程实现)
- [转]在ASP.NET中如何用C#.NET实现基于表单的验证(二)
- 如何设计数据库表实现完整的RBAC(基于角色权限控制)
- 如何使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证
- [转]在ASP.NET中如何用C#.NET实现基于表单的验证(一)
- 如何使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证
- 如何使用 C# .NET 在 ASP.NET 应用程序中实现基于窗体的身份验证
- 基于混合TCP-UDP的HTTP协议实现方法