这个程序是这样的:vb连接pop3服务器,然后读取上面的邮件。每一封邮件会被存成一个txt文件放在本地硬盘上。但是有时候一封邮件不能完整地被保存下来,只能存一半,另外一半被存在了另外一个txt文件里。不管是长邮件还是短邮件都会发生这种情况。这到底是怎么回事?下面是我的代码。请高手指教。  
Public  i  As  Integer  
Public  msgCount  As  Integer  
Public  NumOfMail  As  Integer  
Private  Sub  Command1_Click()  
        sockEmail.Close  
       sockEmail.RemoteHost  =  "pop3服务器"  
       sockEmail.RemotePort  =  110  
       sockEmail.Connect  
       Do  Until  sockEmail.State  =  sckConnected  
               DoEvents:  DoEvents:  DoEvents  
       Loop  
 End  Sub  
Private  Sub  sockEmail_DataArrival(ByVal  bytesTotal  As  Long)  
Dim  sdata  As  String  
 
Dim  strbuffer  As  String  
Dim  filename  As  String  
sockEmail.GetData  sdata,  vbString  
If  Left(sdata,  1)  =  "+"  Or  i  =  4  Then  
   Select  Case  i  
       Case  0  
               i  =  1  
               sockEmail.SendData  "USER  "  &  "用户名"  &  vbCrLf  
                                                               
       Case  1  
               i  =  2  
               sockEmail.SendData  "PASS  "  &  "密码"  &  vbCrLf  
                 
       Case  2  
               i  =  3  
               sockEmail.SendData  "STAT"  &  vbCrLf  
                                           
       Case  3  
               NumOfMail  =  CInt(Mid(sdata,  5,  InStr(5,  sdata,  "  ")  -  5))  
               If  NumOfMail  >  0  Then  
                     msgCount  =  msgCount  +  1  
                     sockEmail.SendData  "RETR  1"  &  vbCrLf  
                     i  =  4  
               Else  
                     sockEmail.SendData  "QUIT"  &  vbCrLf  
                     sockEmail.Close  
                     Exit  Sub  
               End  If  
                 
         Case  4  
                 
                     strbuffer  =  strbuffer  &  sdata  
                     filename  =  "message"  &  msgCount  &  ".txt"  
                     Open  CurDir  &  "\"  &  filename  For  Output  As  #1  
                     Print  #1,  strbuffer  
                     Close  #1  
               
                 strbuffer  =  ""  
                 msgCount  =  msgCount  +  1  
                 sockEmail.SendData  "RETR  "  &  msgCount  &  vbCrLf  
                 i  =  4  
                 If  msgCount  >  NumOfMail  Then  
                       sockEmail.SendData  "QUIT"  &  vbCrLf  
                       sockEmail.Close  
                       Exit  Sub  
                 End  If  
       End  Select  
End  If  
End  Sub

解决方案 »

  1.   

    TCP通讯数据是以流的形式发送的,数据包之间并没有严格的分界线,一个完整的数据可能分两三次发送到终端,也有可能一个数据包中同时包含两个数据。所以TCP通讯必须解决数据分界的问题。建议你仔细察看pop3的协议标准根据数据包头中对单个邮件的长度描述来判断一封mail是否完整接收,如果不完整必须将数据存入缓存等待接下来的数据包。
    UDP通讯就没有这个问题,但是udp不能保证数据包安全完整地送到对方
      

  2.   

    谢谢,那个问题照你的方法我已经解决了。但是我现在碰到一个新问题。
    就是存在硬盘里的txt文件里面有很多无用的信息,那我在vb里怎么样操作能对txt文件整理,用程序选取自己需要的内容从txt文档里。谢谢。
    我今天结帖的。
      

  3.   

    你说的是mime的数据头吧,保存的时候不要一起存进去不就得了