以下代码.怎么接收多条数据..高人解答!!
时间:2008-06-20 14:45:46
来源:论坛整理 作者: 编辑:chinaitzhe
#include "stdafx.h"
#include <iostream>
#include"initsock.h"
#include <stdio.h>
using namespace std;
CInitSock initSock;
int _tmain(int argc, _TCHAR* argv[])
{
//创建套节字
SOCKET s = ::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s == INVALID_SOCKET)
{
printf("Failed socket() \n");
return 0;
}
//填写远程地址信息
sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_port =htons(4567);
servAddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.189");
if(::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)) == -1)
{
printf(" Failed connect() \n");
return 0;
}
//接收数据
char buff[256];
int nRecv ,n = 1 ;
//while(n>0)
//{
nRecv = ::recv (s,buff,256,0);
//
//}
buff[nRecv] = '/0';
printf("接收到数据:%s",buff);
//关闭套节字
::closesocket (s);
cin.get();
return 0;
}
网友回复:while(1)
{
nRecv = ::recv (s,buff,256,0);
buff[nRecv] = '/0';
printf("接收到数据:%s",buff);
}
网友回复:buff[nRecv] = '/0';
这句子是管什么用的..
还有一个问题,服务器先关后.客户这头就无限接收服务器发的最后一条.是哪里出了问题
网友回复:recv后面要判定nRecv 的值,假如服务器关闭了,nRecv 应该是0或者SOCKET_ERROR ,
这时候就应该跳出while循环了。
网友回复:cwc270是对的
while(1)
{
nRecv = ::recv (s,buff,256,0);
if(0 == nRecv ¦ ¦ SOCKET_ERROR == nRecv)
break;
buff[nRecv] = '/0'; // 设置字符串结束符,否则printf不知道什么时候结束输出,轻易造成内存非法访问错误。
printf("接收到数据:%s",buff);
}
网友回复:回CXBID:
按你写的代码跑过,在接收几条数据后,服务器关闭..客户端还是无限接收最后发送的一条.没有关闭跳出循环,是哪里的问题?
关键字:以下,代码,接收,数据,高人,
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面