[問題] socket在第一次recv後 會自動斷線

看板C_and_CPP作者 (懶懶懶)時間13年前 (2011/06/29 14:57), 編輯推噓3(306)
留言9則, 3人參與, 最新討論串1/5 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 2010 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) WinSock.h 問題(Question): 小弟要寫一socket連線的client程式,程式碼如下 主要問題是,連線後 第一次會傳一段訊息,接收server回傳的數值, 從其中擷取資料處理再回傳,但第一次send跟recv都沒有問題 可是第二次要send資料,卻發生SOCKET_ERROR 小弟也有嘗試從WSAGetLastError()找答案 錯誤代碼是 10054 reset by peer 但看完還是不太瞭解@@ 不知道該如何解決這個問題,麻煩大家 P.S. 我有用telnet 登入過但卻沒有上述所發生情形 程式碼(Code):(請善用置底文網頁, 記得排版) if (WSAStartup(MAKEWORD(2,2), (LPWSADATA) &wsadata) != 0){ cerr << "echo_srv: WSAStartup() fails"; exit(1); } serv.sin_family = AF_INET; serv.sin_addr.s_addr = inet_addr(SERV_IP); serv.sin_port = htons(SERV_PORT); if( (s = socket(AF_INET, SOCK_STREAM, 0)) == SOCKET_ERROR ){ cerr << "Open socket error"; exit(1); } if( connect(s, (LPSOCKADDR) &serv, sizeof(serv)) == SOCKET_ERROR){ cerr << "Can't connect to Server\n"; exit(1); } do{ /*n = strlen(send_buf); send_buf[n] = '\0';*/ if( send(s, send_buf, MAXLINE, 0) == SOCKET_ERROR) cerr << "Send message error\n" << send_buf; else cout << "Client send:\n" << send_buf; if( (n = recv(s, recv_buf, MAXLINE, 0)) == 0){ cerr << "Connection closed\n"; break; } else if( n == SOCKET_ERROR){ cerr << "Received error\n" << WSAGetLastError(); break; } else{ recv_buf[n] = '\0'; cout << recv_buf; } 跑完第一次 就中斷了 }while( fgets(send_buf, MAXLINE, stdin) != NULL ); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.164.101.144 ※ 編輯: werbnm 來自: 218.164.101.144 (06/29 15:01) ※ 編輯: werbnm 來自: 218.164.101.144 (06/29 15:01) ※ 編輯: werbnm 來自: 218.164.101.144 (06/29 15:02)

06/29 16:07, , 1F
當你while去跟buffer拿資料拿不到就會斷了啊
06/29 16:07, 1F

06/29 16:08, , 2F
一般常見的範例都是 while(1) 另外設定跳出迴圈的條件
06/29 16:08, 2F

06/29 16:21, , 3F
可是while是我自行輸入的 就算我只按enter還是在迴圈裡阿
06/29 16:21, 3F

06/29 17:05, , 4F
把你 while那個條件再想一下 如果沒有資料再buffer會
06/29 17:05, 4F

06/29 17:05, , 5F
如何??
06/29 17:05, 5F

06/29 17:42, , 6F
我試過在recv那段加迴圈 可是只要收過第一次 第二次就會進
06/29 17:42, 6F

06/29 17:42, , 7F
入 SOCKET_ERROR那段
06/29 17:42, 7F

06/29 17:43, , 8F
所以我想說應該跟我的send_buf有沒有東西無關@@
06/29 17:43, 8F

06/29 17:54, , 9F
結果跟while沒關係啊!!!!!!!!!!
06/29 17:54, 9F
文章代碼(AID): #1E2ioyYZ (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1E2ioyYZ (C_and_CPP)