求高手指点一个C++写的关于socket多线程通信的连接问题,程序代码如下:创建工程,可以运行

/*客户端代码*/#include<iostream>#include<winsock2.h>#include<string>#include<cstdlib>#prag... /*客户端代码*/
#include<iostream>
#include<winsock2.h>
#include<string>
#include<cstdlib>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int main()
{
system("color 3");
cout<<"客户端启动......\n";
//初始化套接字
WSADATA wsaData;
int err;
if((err=WSAStartup(MAKEWORD(2,1),&wsaData))!=0)
return 1;
if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup();
return 1;
}
//创建客户端socket
SOCKET sclient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
//链接服务器
sockaddr_in servAddr;
servAddr.sin_family=AF_INET;
servAddr.sin_addr.S_un.S_addr=inet_addr("202.196.65.89");
servAddr.sin_port=htons(8080);
cout<<"确认建立连接?yes/no\n";
char flag[3];
gets(flag);
while(true)
{
if(strcmp(flag,"yes\0")==0)
{
connect(sclient,(sockaddr*)&servAddr,sizeof(servAddr));
break;
}
else
{
cout<<"Please input yes: ";
gets(flag);
}
}
//发送数据
char buf[1024];
cout<<"发送内容: ";
while(cin.getline(buf,1024))
{
//通过套接字给主机发送字符串
send(sclient,buf,strlen(buf)+1,0);
char bufFankui[1024];
recv(sclient,bufFankui,sizeof(bufFankui)+1,0);
cout<<"接收内容: ";
cout<<bufFankui<<endl;
cout<<endl;
cout<<"发送内容: ";

/*recv(sclient,bufFankui,sizeof(bufFankui)+1,0);
while(true){
if(recv(sclient,bufFankui,sizeof(bufFankui)+1,0))
cout<<bufFankui<<endl;
else
break;
}
cout<<"发送内容:";*/
}
system("pause");
return 0;
}
http://zhidao.baidu.com/question/570313294.html&from=emailmsg 服务端代码在这里
展开
 我来答
zxpointer
2013-07-15 · TA获得超过4102个赞
知道大有可为答主
回答量:1868
采纳率:33%
帮助的人:1213万
展开全部
char flag[3]; 数组开小了, 输入yes时 flag中实际存储的是 'y','e','s','\0' 四个字符, 它存不下。

另外if(strcmp(flag,"yes\0")==0) 可以将"yes\0"写成"yes" 因为"yes"本身就代表了以\0结束,你写成"yes\0"实际就是"yes\0\0" 但它不会出问题,因为比较的时候遇到\0就结束了, 所以无所谓
追问
不是这个地方的问题,你把服务端的代码也看看,网址在上面
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式