示例#1
0
int recv_file(int sfd)
{
	int ret;
	char buf[1024]={0};
	int len;
	ret=recv_n(sfd,(char*)&len,sizeof(int));
	if(-1==ret)
	{
		perror("recv");
		exit(-1);
	}
	ret=recv(sfd,buf,len,0);
	if(-1==ret)
	{
		perror("recv");
		exit(-1);
	}
	int fd;
	fd=open(buf,O_CREAT|O_RDWR,0666);
	if(-1==fd)
	{
		perror("open");
		return -1;
	}
	while(1)
	{
		ret=recv_n(sfd,&len,sizeof(int));
		if(-1==ret)
		{
			perror("recv1");
			exit(-1);
		}
		if(len==0)
		{
			break;
		}
		bzero(buf,sizeof(buf));
		ret=recv_n(sfd,buf,len);
		if(-1==ret)
		{
			perror("recv2");
			exit(-1);
		}
		ret=write(fd,buf,len);
		if(-1==ret)
		{
			perror("write");
			return -1;
		}
	}
	close(fd);
	close(sfd);
	return 0;
}
示例#2
0
ssize_t CwxSocket::recv (CWX_HANDLE handle, CwxMsgHead& head, CwxMsgBlock*& msg, CwxTimeouter  *timeout) 
{
    char szHead[CwxMsgHead::MSG_HEAD_LEN];
    ssize_t  ret = read_n(handle, szHead, CwxMsgHead::MSG_HEAD_LEN, timeout, NULL);
    if (ret != CwxMsgHead::MSG_HEAD_LEN)
        return ret;
    if (!head.fromNet(szHead))
    {
        errno = EBADMSG;
        return -1;
    }
    msg = CwxMsgBlockAlloc::malloc(head.getDataLen());
    if (!msg)
    {
        errno = ENOMEM;
        return -1;
    }
    ret = recv_n(handle, msg->wr_ptr(), head.getDataLen(), timeout, NULL);
    if (ret != (ssize_t)head.getDataLen())
    {
        CwxMsgBlockAlloc::free(msg);
        msg = NULL;
        return ret;
    }
    msg->wr_ptr(head.getDataLen());
    return CwxMsgHead::MSG_HEAD_LEN + head.getDataLen();

}
示例#3
0
int IOSocket::recv_pkt(stNetMsg& msg)
{
	if ( m_rMessages.size() < sizeof(stNetMsgHead) )
	{
		recv_n();
	}

	// 检查包头
	stNetMsgHead head;
	if ( 0 == m_rMessages.get((char*)&head,sizeof(stNetMsgHead)) )
	{
		return 0;
	}

	if ( head._size <= 0 || head._size > NetMsg_Max_Size )
	{
		LOGE("read invalid msg header{size=%u}",head._size);
		error(IOSocketError_PACKET);
		return 0;
	}

	if( 0 == recv(msg.ptr(),head._size) )
	{
		return 0;
	}

	return msg.size();
}
示例#4
0
文件: client.c 项目: chao2015/linux_c
int recv_msg(int sockfd){
	int len;
	char buf[1024]={0};
	while(1){
		recv_n(sockfd,(char*)&len,sizeof(int));
		if(len<0)
			return len;
		if(len==0){
			break;
		}
		bzero(buf,sizeof(buf));
		recv_n(sockfd,buf,len);
		printf("%s",buf);
	}
	return 0;
}
示例#5
0
文件: client.c 项目: lzq1126/learngit
int main(int argc, char *argv[])
{
	int sfd;
	sfd=tcp_connect("192.168.168.130", atoi("3000")); //ip和port
	printf("connect success!\n");
	data_t buf;
	bzero(&buf, sizeof(buf));          
	int ret;
	printf("1\n");
	ret = recv(sfd,&buf.len,sizeof(int), 0);    //接收文件名字的长度
	if(-1 == ret)
	{
		perror("recv: receive filename length");
		exit(-1);
	}
	printf("2\n");
	ret = recv(sfd,buf.t_data,buf.len,0);			//接收文件名
	if(-1 == ret)
	{
		perror("recv:recvive filename");
		exit(-1);
	}
	int fd;
	fd = open(buf.t_data, O_RDWR | O_CREAT, 0666);  //创建一个同名文件
	if(-1 == fd)
	{
		perror("open");
		exit(-1);
	}
	int flag = 0;   //用来标记文件传输完毕
	printf("3\n");
	while(1)
	{
		bzero(&buf, sizeof(buf));
		ret = recv(sfd,&buf,sizeof(int), 0);   //从服务端接收文件数据的长度
		if(-1 == ret)
		{
			perror("recv: sfd");
			exit(-1);
		}
		printf("4\n");
		recv_n(sfd,buf.t_data,buf.len);      //从服务端接收文件数据,循环接收数据
	printf("5\n");
		if(buf.len == sizeof(int) && !memcmp(buf.t_data, &flag, 4))   //判断文件接收完毕
		{
			break;
		}
	//	printf("-----------%s\n", buf.t_data);
		ret = write(fd, buf.t_data, buf.len);//写入到client的文件中
		if(-1 == ret)
		{
			perror("write");
			close(fd);
			return -1;
		}
	}
	printf("file download successful!\n");
	close(fd);
}
示例#6
0
int	IOSocket::recv(char* buf,int size)
{
	if ( m_rMessages.size() < size )
	{
		recv_n();
	}
	return m_rMessages.pop(buf,size);
}
示例#7
0
void handle(int fd, const char *msg) {
  size_t size = strlen(msg) + 1;
  unsigned char reply[size];

  write(fd, msg, size);

  ssize_t err = recv_n(fd, reply, size);
  if (err < 0) {
    err("read");
    return;
  }
  fprintf(stdout, "%s\n", reply);
}
示例#8
0
文件: client.c 项目: chao2015/linux_c
int main(int argc,char* argv[]){
	if(argc!=3){
		printf("error args\n");
		return -1;
	}
	int sockfd;
	sockfd=socket(AF_INET,SOCK_STREAM,0);
	
	struct sockaddr_in server;
	bzero(&server,sizeof(server));
	server.sin_family=AF_INET;
	server.sin_port=htons(atoi(argv[2]));
	server.sin_addr.s_addr=inet_addr(argv[1]);
	
	connect(sockfd,(struct sockaddr*)&server,sizeof(struct sockaddr));

	char buf[1024]={0};
	int len;
	recv_n(sockfd,(char*)&len,sizeof(int));

	recv(sockfd,buf,len,0);

	int fd;
	fd=open(buf,O_CREAT|O_RDWR,0666);

	while(1){
		recv_n(sockfd,(char*)&len,sizeof(int));
		if(len==0)
			break;

		bzero(buf,sizeof(buf));
		recv_n(sockfd,buf,len);

		write(fd,buf,len);
	}
	close(fd);
	close(sockfd);
}
示例#9
0
文件: recv_file.c 项目: superszx/ftp
void recv_file(int sfd)
{	
	data buf;
	bzero(&buf,sizeof(buf));
	recv(sfd,&buf.len,4,0);
	recv(sfd,buf.buf,buf.len,0);//接收文件名
	printf("downloading file[%s]...\n",buf.buf);
	int fd = open(buf.buf,O_WRONLY|O_CREAT,0666);
	if(-1 == fd)
		err("open")
	while(1)
	{
		bzero(&buf,sizeof(buf));
		recv(sfd,&buf.len,4,0);
		if(0 == buf.len)
			break;
		recv_n(sfd,&buf);
		write(fd,buf.buf,buf.len);
	}
	printf("100%% done!\n");
	close(fd);
}
示例#10
0
int main(int argc,char* argv[])
{
    if(argc != 3)
    {
        printf("error args\n");
        return -1;
    }
    int sfd=socket(AF_INET,SOCK_STREAM,0);
    if(-1==sfd)
    {
        perror("socket");
        return -1;
    }
    struct sockaddr_in ser;
    bzero(&ser,sizeof(ser));
    ser.sin_family=AF_INET;
    ser.sin_port=htons(atoi(argv[2]));
    ser.sin_addr.s_addr=inet_addr(argv[1]);
    int ret;
    ret=connect(sfd,(struct sockaddr*)&ser,sizeof(struct sockaddr));
    if(-1==ret)
    {
        perror("connect");
        return -1;
    }
    printf("connect success\n");
    int len;
    data_t buf;
    bzero(&buf,sizeof(buf));
    ret=recv(sfd,&buf.len,4,0);   //把int len 给取出来,len就是file名字的长度
    if(-1==ret)
    {
        perror("recv1");
        return -1;
    }
    recv(sfd,buf.buf,buf.len,0);
    int fd;
    fd=open(buf.buf,O_RDWR|O_CREAT,0666);
    if(-1==fd)
    {
        perror("open");
        return -1;
    }
    int flag=0;
    while(1)
    {
        bzero(&buf,sizeof(buf));
        recv_n(sfd,&buf.len,4,0);
        recv_n(sfd,buf.buf,buf.len,0);
        if(buf.len==4 && !memcmp(buf.buf,&flag,4))  //返回起始地址
        {
            break;
        }
        ret=write(fd,buf.buf,buf.len);
        if(ret<0)
        {
            perror("write");
            return -1;
        }
    }
    close(sfd);
    return 0;
}