求高手指点一个C++写的关于socket多线程通信的连接问题,程序代码如下:创建工程,可以运行
//客户端的代码#include<iostream>#include<winsock2.h>#include<string>#include<cstdlib>#pragm...
//客户端的代码
#include<iostream>
#include<winsock2.h>
#include<string>
#include<cstdlib>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
string str="";
void recvf(SOCKET sockConnect)
{
char bufFanKui[1024]="";
while(1)
{
if(recv(sockConnect,bufFanKui,sizeof(bufFanKui),0)==SOCKET_ERROR)
{
cout<<"failed---这是客户端……"<<GetLastError()<<endl;
return ;
}
if(str[0]!='\0')
{
str +=bufFanKui;
str+='\n';
cout<<str<<endl;
}
}
}
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;
memset(&servAddr,0,sizeof(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[6]="";
gets(flag);
while(true)
{
if(strcmp(flag,"yes")==0)
{
if(connect(sclient,(struct sockaddr*)&servAddr,sizeof(servAddr))==SOCKET_ERROR)
cout<<"failed connect!"<<GetLastError()<<endl;
break;
}
else
{
cout<<"Connect OK.Please input yes: ";
gets(flag);
}
}
//发送数据
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)recvf,(void*)sclient,0,NULL);
char buf[1024]="";
cout<<"发送内容: ";
while(cin.getline(buf,1024))
{
//通过套接字给主机发送字符串
send(sclient,buf,sizeof(buf),0);
cout<<"发送内容: ";
}
closesocket(sclient);
system("pause");
return 0;
} 展开
#include<iostream>
#include<winsock2.h>
#include<string>
#include<cstdlib>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
string str="";
void recvf(SOCKET sockConnect)
{
char bufFanKui[1024]="";
while(1)
{
if(recv(sockConnect,bufFanKui,sizeof(bufFanKui),0)==SOCKET_ERROR)
{
cout<<"failed---这是客户端……"<<GetLastError()<<endl;
return ;
}
if(str[0]!='\0')
{
str +=bufFanKui;
str+='\n';
cout<<str<<endl;
}
}
}
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;
memset(&servAddr,0,sizeof(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[6]="";
gets(flag);
while(true)
{
if(strcmp(flag,"yes")==0)
{
if(connect(sclient,(struct sockaddr*)&servAddr,sizeof(servAddr))==SOCKET_ERROR)
cout<<"failed connect!"<<GetLastError()<<endl;
break;
}
else
{
cout<<"Connect OK.Please input yes: ";
gets(flag);
}
}
//发送数据
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)recvf,(void*)sclient,0,NULL);
char buf[1024]="";
cout<<"发送内容: ";
while(cin.getline(buf,1024))
{
//通过套接字给主机发送字符串
send(sclient,buf,sizeof(buf),0);
cout<<"发送内容: ";
}
closesocket(sclient);
system("pause");
return 0;
} 展开
2个回答
展开全部
你倒是说说需要帮你什么?
追问
到服务端霞看看截图,自己创建两个工程运行一下,看看结果就能明白。。。谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
客户端这边没什么问题
追问
都没有问题,运行过程中会出问题,你把IP改成自己的,在机子电脑上创建一个工程试试,运行一下,就和服务端下的截图一样了。
追答
= =。 你去看服务端的回答,帮你改了下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询