上课老师留的作业,
“基于UDP协议的可靠的电子邮件传输系统”。没有什么头绪,
大家有什么建议没有?怎么实现、看些什么书、看看哪些网站?

解决方案 »

  1.   

    说说思路吧:
    用UDP方式创建一个socket,bind某个端口,启动一个线程,不断检测是否有数据到达,如果有就读入缓冲区(这些都是邮件内容),进行文本显示和存储等等。
    发送时,把待发文本拷入缓冲区然后发送到目标地址和端口就行了。
    最重要的一点是可靠,因为UDP的性质就是无连接、不可靠,所以在接收到邮件之后,记得发送确认消息(和上边的发邮件一样)。当一方发送了邮件之后在指定时间内没有收到确认消息,则认为邮件丢失了,重新发送。
      

  2.   

    多谢你的指点!再问一下,是不是需要写两个程序,
    一个clien、一个server,而且server要一直运行着?除了上面说的握手过程以外,还需要什么机制来保证数据传输的可靠性?要是数据过大,需要分成数据包的时候,数据包的大小为多大合适??
      

  3.   

    一般的客户机服务器编程会吧。这个要加上重传机制。假如是多线程的话,比较简单一点。客户端发出一条命令后服务器端必须发回一条ACK自定义消息。客户端假如收不到的话,过一秒钟重传同一条命令(命令头部加上ID)。假如重传6次未成功,可以直接 关闭了。服务器端发出一条响应后,客户端必须应答,假如不应答的话,过一秒种再重传同一条命令。(命令头部加上ID)。假如重传未成功,关闭客户session data
      

  4.   

    sevencat(七猫),我是初学者,“一般的客户机服务器编程”没做过,
    能不能指点一下?
      

  5.   

    其实我刚才说错了。实际上你们老师布置的作业不是非常好的,说是什么邮件系统,其实就是文件传输吧。只涉及到POP3的部分吧。服务器应该存放各个连接的数据。
    一般我做是用HASH表来做,你可以直接用个LIST来做可能就可以交作业了。
    结点里面放这些东西。
    比如像这样:
    struct sessionnode
    {
    unsigned long m_ip;
    unsigned short m_port;
    char m_name[12];
    char m_pass[12];
    FILE *m_file;存放文件指针的。
    unsigned long m_offset;存放文件位置的。
    bool m_logined;
    };
    好了,这样客户向服务器连接的格式你自己掌握。
    先开始认证过程。
    USER yourname
    PASS yourpass
    服务器收到后然后把文件传给你。你每次发送都要在头部加个ID。
    服务器收到后假如你不是USER命令的话就在链表中查找有没有你的IP和PORT。没有的话就不处理。假如是USER命令的话就初始化一个sessiondata.
    认证后就开始传输了。
    每次传输重传机制我上面已经说得很清楚了。我想没必要再讲了。
      

  6.   

    http://www.vckbase.com/code/查找udp!