[問題] socket在第一次recv後 會自動斷線
開發平台(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
06/29 16:07, 1F
→
06/29 16:08, , 2F
06/29 16:08, 2F
→
06/29 16:21, , 3F
06/29 16:21, 3F
推
06/29 17:05, , 4F
06/29 17:05, 4F
→
06/29 17:05, , 5F
06/29 17:05, 5F
→
06/29 17:42, , 6F
06/29 17:42, 6F
→
06/29 17:42, , 7F
06/29 17:42, 7F
→
06/29 17:43, , 8F
06/29 17:43, 8F
推
06/29 17:54, , 9F
06/29 17:54, 9F
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 5 篇):