[問題] socket程式 自己輸入IP後client卡住

作者: airawesu   2016-11-19 12:43:28
開發平台(Platform): (Ex: Win10, Linux, ...)
VS 2015
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
C++ WIN32主控台應用程式
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
client:
#include <iostream>
#include <string>
using namespace std;
#include "winsock2.h"
#pragma comment(lib, "ws2_32.lib")
server:
#include <iostream>
using namespace std;
#include "winsock2.h"
#pragma comment(lib, "ws2_32.lib")
問題(Question):
我寫了一對socket的小程式
client利用server的IP跟port來通訊
client在連線後輸入任意字元 server收到之後回傳給client
client顯示server的回傳
原程式運作OK 現client增新宣告及新程式段
char IP_char[17];
cout << "please key in IP:";
cin >> IP_char;
cout << "\n"; //換行
原serverIP宣告 servAddr.sin_addr.s_addr = inet_addr("36.227.47.199");
改為 servAddr.sin_addr.s_addr = inet_addr(IP_char);
另持續給使用者輸入文字用程式段的while迴圈為
while(1) {
ZeroMemory(str, BUF_SIZE);
cout << "you key in :";
cin.getline(str, BUF_SIZE);
//向服務器發送數據
ZeroMemory(buf, BUF_SIZE);
strcpy_s(buf, str);
retVal = send(sHost, buf, strlen(buf), 0);
if (SOCKET_ERROR == retVal) {
cout << "send failed!\n";
closesocket(sHost); //關閉Socket
WSACleanup(); //釋放Socket資源
system("pause");
return -1;
}
cout <<"server echo : ";
retVal = recv(sHost, buf, BUF_SIZE, 0);
cout << buf << endl; //輸出由Server端傳送的字串
if (!strcmp(buf,"bye")) break;
}
最後發現cin.getline的指令疑似被略過
client及server端變成如圖片
http://i.imgur.com/31lho1j.jpg
http://i.imgur.com/1gy0EDA.jpg
餵入的資料(Input):
預期的正確結果(Expected Output):
please key in IP:36.227.47.199
you key in :hello world
server echo:hello world
錯誤結果(Wrong Output):
如上
程式碼(Code):(請善用置底文網頁, 記得排版)
http://ideone.com/rbt8e7
http://ideone.com/YIvrfH
補充說明(Supplement):
請鞭小力點(跪
作者: Schottky (順風相送)   2016-11-19 13:29:00
會不會是卡在 connect,server 連不上
作者: Qbsuran (Qbsuran)   2016-11-19 17:51:00
先用wireshark看連線有沒有正常送出
作者: Schottky (順風相送)   2016-11-19 18:05:00
socket 出問題不一定是出在程式上wireshark 或 tcpdump 之類的 sniffer 確實會有需要
作者: fanntone (我是胖子)   2016-11-19 21:25:00
你應該是參考網路上XYZ那篇寫的 先把main一開始就包進while迴圈就可以一直輸入了
作者: johnpage (johnpage)   2016-11-20 06:08:00
數值與字串

Links booklink

Contact Us: admin [ a t ] ucptt.com