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