⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dvs.c

📁 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 + -