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; }
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(); }
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(); }
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; }
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); }
int IOSocket::recv(char* buf,int size) { if ( m_rMessages.size() < size ) { recv_n(); } return m_rMessages.pop(buf,size); }
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); }
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); }
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); }
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; }