模拟一个刷卡并传输相片的考勤系统
程序下载至开发板,客户端和服务器端连接后,回车刷卡,出现如下错误:
服务器端:[root@cfzhou home]# ./server 
open: : No such file or directory
段错误 (core dumped)
客户端:[root@UP-TECH nfs]# ./armsrv 192.168.0.100CARD NO: fb_width = 320, fb_height = 240, fb_depth = 16
buf.length = 32768
[  573.335000] zc3xx: probe 2wr ov vga 0x0000SCHED_OTHER 
SCHED_OTHER 
open: : No such file or directory
fb_width = 320, fb_height = 240, fb_depth = 16
<app> VIDIOC_REQBUFS error!
SCHED_OTHER 
error: VIDIOC_DQBUF read_frame
SCHED_OTHER 
connect: Connection refused客户端client.c如下
#include <stdio.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <pthread.h>#define port 3333
 
int  sockclient;
struct sockaddr_in sockaddr1;
char ipaddr[15]="192.168.0.100";
int linkS() 
{
if((sockclient=socket(AF_INET,SOCK_STREAM,0))==-1)
{
    perror("socket");
    exit(0);
}memset(&sockaddr1,0,sizeof(sockaddr1));
sockaddr1.sin_family = AF_INET;
sockaddr1.sin_addr.s_addr = inet_addr(ipaddr);
sockaddr1.sin_port = htons(port);if(connect(sockclient,(struct sockaddr* )&sockaddr1,sizeof(sockaddr1))==-1)
{
    perror("connect");
    exit(0);
}return 1;
}//~~~~~~~~~~~~~~~~~~~~~~~上传文件~~~~~~~~~~~~~~~~~~~~~~~~~
void upload_file(char *filename)
{
int fd;
char buf[1024];
int count=0;
int size = strlen(filename);
char cmd = 'D';
char RF ='D';struct stat fstat;if((fd=open(filename,O_RDONLY))==-1)
{
perror("open: ");
return;
}/*发送上传命令*/
write(sockclient,&cmd,1);//靠靠
//write(sockclient,(void *)&card_NO,4);/*发送文件名*/
write(sockclient,(void *)&size,4);
write(sockclient,filename,size);/*发送文件长度*/
if(stat(filename,&fstat)==-1)
return;write(sockclient,(void *)&(fstat.st_size),4);/*发送文件内容*/
while((count=read(fd,(void *)buf,1024))>0)
{
write(sockclient,&buf,count);
} close(fd);}
//~~~~~~~~~~~~~~~~~~~~~~~下载文件~~~~~~~~~~~~~~~~~~~~~~~~~void download_file(char *filename)
{
int fd;
char buf[1024];
int count=0;
int filesize = 0;
int tmpsize = 0;
int namesize = 0;
char cmd = 'D';int size = strlen(filename);/*发送下载命令*/
write(sockclient,(void *)&cmd,1);/*发送文件名*/
write(sockclient,&size,4);
write(sockclient,filename,size);/*创建文件*/
if((fd=open(filename,O_RDWR|O_CREAT,0777))<0)
{
perror("open error:\n");
}/*接收文件长度*/
read(sockclient,&filesize,4); while((count=read(sockclient,(void *)buf,1024))>0)
{
write(fd,&buf,count);
tmpsize += count;
if(tmpsize==filesize)
break; }// 靠靠靠靠縝uffer?
//   // 靠靠靠靠靠靠靠靠靠靠靠靠靠靠靠?
     bzero(buf, 1024); 
       int length = 0; 
       while((length = recv(sockclient, buf, 1024, 0)) > 0) 
           { 
               if(fwrite(buf, sizeof(char), length, fd) < length) 
                   { 
                         printf("File:\t%s Write Failed\n", filename); 
                              break; 
                                   } 
                                       bzero(buf, 1); 
                                         } 
                                            
                                              // 靠靠靠靠靠靠縮ocket 
                                                printf("Receive File:\t%s From Server IP Successful!\n", filename); 
                                                  
                                                    close(sockclient); 
close(fd);
}
void quit()
{
char cmd = 'Q';write(sockclient,(void *)&cmd,1);system("clear");exit(0);
}//int main(int argc,char *args[])
int client()
{
char file_u[]={"video.jpg"};
char file_a[]={"card_NO[4]"};
char cmd = "AD";
unsigned char RF="BC";
sleep(1);
        int policy;
        struct sched_param param;
        pthread_getschedparam(pthread_self(),&policy,&param);
        if(policy == SCHED_OTHER)
                printf("SCHED_OTHER \n");
        if(policy == SCHED_RR)
                printf("SCHED_RR \n");
        if(policy == SCHED_FIFO)
                printf("SCHED_FIFO \n");   // if(argc!=2)
   // {
//    printf("format error: you mast enter ipaddr like this : client 192.168.1.6\n");
//    exit(0);
   // }
  
    //strcpy(ipaddr,args[1]);     linkS();
   
    upload_file(file_u);
    upload_file(file_a);
    write(sockclient,(void *)&cmd,sizeof(cmd));
    write(sockclient,(void *)&RF,sizeof(RF));    close(sockclient);
    
    return 0;
}服务器端server.c代码如下:
#include <stdio.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include "card_ctrl.h"
//#include "main.h"
char clientIP[15]; /*文件列表*/
int sockfd;                      
int new_fd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sin_size,portnumber = 3333;
void handle(char cmd)
{
char filename[100];int filesize = 0;
int tmpsize = 0;
int namesize = 0;
int count=0;
    //char* ID[4];
int fd;
struct stat fstat;
char buf[1024];switch(cmd)
{
case 'U':
{
//接受卡号
read(new_fd,card_NO,4);
//printf(*ID);
//printf('/n');
/*接收文件名*/
read(new_fd,&namesize,4);
read(new_fd,(void *)filename,namesize);
filename[namesize]='\0';/*创建文件*/
if((fd=open(filename,O_RDWR|O_CREAT,0777))<0)
{
perror("open error:\n");
}/*接收文件大小*/
read(new_fd,&filesize,4); while((count=read(new_fd,(void *)buf,1024))>0)
{
write(fd,&buf,count);
tmpsize += count;
if(tmpsize==filesize)
    break;
}close(fd);
}
break;case 'D':
{
/* 接收文件名 */
read(new_fd,&namesize,4);
read(new_fd,filename,namesize);
filename[namesize]='\0';if((fd=open(filename,O_RDONLY))==-1)
{
perror("open: ");
return;
}/*发送文件长度*/
if(stat(filename,&fstat)==-1)
return;write(new_fd,&(fstat.st_size),4);/*发送文件内容*/
while((count=read(fd,(void *)buf,1024))>0)
{
write(new_fd,&buf,count);
}close(fd);}
break;
}
}
/*主函数*/
void main()
{
int i=0;
char cmd;if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("socket error");
exit(-1);
}bzero(&server_addr,sizeof(struct sockaddr_in));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
server_addr.sin_port=htons(portnumber); if(bind(sockfd,(struct sockaddr*)(&server_addr),sizeof(struct sockaddr))<0)
{
    perror("Bind error");
    exit(1);
}if(listen(sockfd, 5)==-1)
{
    perror("listen error");
    exit(1);
}
while(1)
{
if((new_fd = accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size)) == -1)
{
perror("accept error!");
exit(-1);
}//strcpy(clientIP,inet_ntoa(client_addr.sin_addr));  while(1)
{
        /*读取命令*/
read(new_fd,&cmd,1);if(cmd == 'Q')
{
                         close(new_fd);
break;
}
else
{
handle(cmd);
}
}
close(new_fd);
}
close(sockfd);
}