我的客户端大致如下,运行后跟服务器通信时,第一次输入数据能发送到服务器端,第二次不行,第三次就输出:“传输数据失败!”,不知道怎么回事??? SOCKADDR_IN addrSrv;
addrSrv.sin_family=AF_INET;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); //本地机子测试
addrSrv.sin_port=htons(6000); //跟服务器指定端口相同
SOCKET sockClient; sockClient=socket(AF_INET,SOCK_STREAM,0);
char sendbuff[200]="";
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); //向服务器发出连接请求
for(;;)
{
/*send data to server*/
printf("Input data:\n");
if(gets(sendbuff) == NULL)
break;
else
{
if(SOCKET_ERROR == send(sockClient, sendbuff, strlen(sendbuff)+1, 0))
{
printf("传输数据失败!\n");
break;
}
}
}//end :for closesocket(sockClient);
addrSrv.sin_family=AF_INET;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); //本地机子测试
addrSrv.sin_port=htons(6000); //跟服务器指定端口相同
SOCKET sockClient; sockClient=socket(AF_INET,SOCK_STREAM,0);
char sendbuff[200]="";
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); //向服务器发出连接请求
for(;;)
{
/*send data to server*/
printf("Input data:\n");
if(gets(sendbuff) == NULL)
break;
else
{
if(SOCKET_ERROR == send(sockClient, sendbuff, strlen(sendbuff)+1, 0))
{
printf("传输数据失败!\n");
break;
}
}
}//end :for closesocket(sockClient);
那是不是第一次输入数据就调出循环~~~
那你看看sendbuff变化~~
break;
跳出for循环而结束~~~
break;
跳出for循环而结束~~~
----------------------------------------------------
我改成这样:cin>>sendbuff;也无济于事
.......
SOCKET SockSrv;
SockSrv=socket(AF_INET,SOCK_STREAM,0); //创建套接字
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
if(bind(SockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))) //绑定套接字到一个IP和指定端口
{
MessageBox(NULL,"绑定失败!","你好!",MB_OK);
return 0;
}
listen(SockSrv,5); //将套接字设置为监听模式等待连接请求
char sendbuff[200]="欢迎你访问服务器端";
char recvbuff[200]="";
SOCKET sockconn; //处于连接状态的套接字
SOCKADDR_IN addrClient;
int length=sizeof(SOCKADDR);
while(1)
{
sockconn=accept(SockSrv,(SOCKADDR*)&addrClient,&length);
recv(sockconn,recvbuff,200,0); //不断的监听
cout<<recvbuff<<endl;
send(sockconn,sendbuff,strlen(sendbuff)+1,0);//发送一个收到数据的信息给客户端
closesocket(sockconn);
}