📄 dvs.c
字号:
/*
*Copyright (c) 2007,北京声讯电子有限公司嵌入式组
*All rights reserved.
*
*文件名称:DVS.c
*文件标识:参考协议文档
*摘 要:实现DVS上的功能,包括:网络连接、图像传输、报警功能、参数设置/上传、云台控制
* 透明通道
*当前版本:1.0
*作 者:李铭轩
*完成日期:2007年8月13日
*
*取代版本:
*原作者 :
*完成日期:
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <pthread.h>
#include <time.h>
//#include "dvs.h" //参数配置表
//#include "uart.h" //串口配置表
typedef unsigned char uint8;
#define DWORD unsigned int
#define BYTE unsigned char
#define SERVPORT 3333
#define BACKLOG 10
#define MAX_CONNECTED_NO 10
#define MAXDATASIZE 1000
/*************************命令发送格式**************************************/
struct FIX_RECEIVE_DATA
{
DWORD length; //总的长度
DWORD spare; //保留字节
DWORD CheckSum; //校验和
DWORD requestID; //客户端请求命令
BYTE clientIP[4]; //客户端IP地址
BYTE usrID[4]; //用户ID
BYTE clientMAC[6]; //客户端物理地址
BYTE spare2[2]; //保留字节
};
struct FIX_SEND_DATA
{
DWORD length; //总的长度
DWORD Checksum; //校验和
DWORD state; //状态
DWORD spare; //保留字节
};
/***************************************************************************/
int main()
{
struct sockaddr_in server_sockaddr,client_sockaddr;
int sin_size,recvbytes;
int sockfd,client_fd;
char buf[MAXDATASIZE];
char videobuf[238834];
struct FIX_SEND_DATA FIXS;
//struct FIX_RECEIVE_DATA FIXR;
struct FIX_RECEIVE_DATA *pReceiv=(struct FIX_RECEIVE_DATA *)buf;
uint8 command1,command2,command3;
FILE *stream;
int numread;
/*创建socket套接字进行连接*/
if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket");
exit(1);
}
printf("socket success!,sockfd=%d\n",sockfd);
/*设置结构体参数*/
server_sockaddr.sin_family=AF_INET;
server_sockaddr.sin_port=htons(SERVPORT);
server_sockaddr.sin_addr.s_addr=INADDR_ANY;
bzero(&(server_sockaddr.sin_zero),8);
/*调用bind函数进行端口绑定*/
if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))==-1)
{
perror("bind");
exit(1);
}
printf("bind success!\n");
while(1)
{
/*启动监听函数*/
if(listen(sockfd,BACKLOG)==-1)
{
perror("listen");
exit(1);
}
printf("listening......\n");
/*调用接受函数,等待客户端连接*/
if((client_fd=accept(sockfd,(struct sockaddr *)&client_sockaddr,&sin_size))==-1)
{
perror("accept");
exit(1);
}
/*调用recv函数,接受客户端数据*/
if((recvbytes=recv(client_fd,buf,sizeof(buf),0))==-1)
{
perror("recv");
exit(1);
}
/***发送状态格式*************************************************************************/
FIXS.length=12;
FIXS.Checksum=100;
FIXS.state=3;
FIXS.spare=0;
if(send(client_fd,&FIXS,sizeof(FIXS),0)==-1)
{
perror("error");
exit(1);
}
printf("发送状态格式完毕!\n");
//操作
if((pReceiv->clientIP[0]==192)&&(pReceiv->clientIP[1]==168)&&(pReceiv->clientIP[2]==0)&&(pReceiv->clientIP[3]==161))
{
printf("校验合格完毕!\n");
//解析命令
command1=((pReceiv->requestID)&0xFF0000)>>16;
command2=((pReceiv->requestID)&0x00FF00)>>8;
command3=((pReceiv->requestID)&0x0000FF);
switch(command1)
{
case 0xF1://报警功能
printf("报警功能\n");
break;
case 0xF2://图像传输
printf("图像传输\n");
/********************************************************************/
//读取视频文件数据
if((stream=fopen("test.avs","r+b"))!=NULL)
{
printf("打开文件正确\n");
if((numread=fread( videobuf,sizeof(char),sizeof(videobuf),stream))!=NULL)
{
printf("数据包大小为:%d\n",sizeof(videobuf));
}
else
{
printf("读写错误\n");
exit(1);
}
}
printf("读取数据完毕\n");
if(send(client_fd,videobuf,sizeof(videobuf),0)==-1)
{
printf("发送错误");
exit(1);
}
printf("发送数据完毕!\n");
/*********************************************************************/
break;
case 0xF3://参数设置
printf("参数设置\n");
break;
case 0xF4://参数上传
printf("参数上传\n");
break;
case 0xF5://云台控制
printf("云台控制\n");
break;
case 0xF6://透明通道
printf("透明通道\n");
break;
default:
break;
}
}
else
{
printf("校验错误完毕!\n");
}
}//while(1)
close(sockfd);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -