[問題] winsock recv()
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
windows 7 devc++ 4.9.9.2
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
寫一個socket程式連上用filezila server 架的FTP
recv()接收歡迎訊息後資料的迴圈部分會無法跳出
預期的正確結果(Expected Output):
recv()接收完資料後跳離迴圈 往下執行
程式碼(Code):(請善用置底文網頁, 記得排版)
......
connect(sockfd, (SOCKADDR*)&servaddr, sizeof(servaddr));
do {
rev_len = recv(sockfd, recvbuf, sizeof(recvbuf), 0);
if ( rev_len > 0 ){
printf("%s",recvbuf);
memset(recvbuf, 0, sizeof(recvbuf));//清空buffer的內容
}else if ( rev_len == 0 ){
printf("Connection closed\n");
break;
}else{
printf("recv failed: %d\n", WSAGetLastError());
break;
}
} while( rev_len > 0 );
printf("Hello??\n");
...
補充說明(Supplement):
可以很順利地收到歡迎訊息
220-FileZilla Server version 0.9.41 beta
220-written by Tim Kosse (Tim.Kosse@gmx.de)
220 Please visit http://sourceforge.net/projects/filezilla/
就不會再動了...
試過不用迴圈recv 只收一次 是可以往下執行
但訊息會沒收完 而且每次斷的長度也不一樣
因為是以前寫的程式(在XP上) 我很確定他曾經可以WORK= =
有想過用 MSG_WAITALL flag 但編輯器說這個參數undefined
請版上大大幫忙看哪出了問題 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.169.104.75
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章