[问题] 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