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

📄 fooserver.c

📁 基于socket的简单通讯程序
💻 C
字号:
#include	<sys/socket.h>
#include	<arpa/inet.h>
#include	<errno.h>
#include	<stdio.h>
#include	<sys/types.h>
#include	<stdlib.h>	
#include	<string.h>	
#include	<unistd.h>
#include	"myrdwr.h"

#define YUV_Size 1440*576

#define CIF 1
#define	CIF_YSize	352*288
#define CIF_CbSize	176*144
#define	CIF_CrSize	176*144



/*********************************************************************************************
ITU656 4:2:2

	 0 1 2  3 4  5  6 7  8 9 10             1439 
     * * *       *      *  * *
0	Cb|Y|Cr|Y|Cb|Y|Cr|Y|Cb|Y|Cr|......Cb|Y|Cr|Y
1	Cb|Y|Cr|Y|Cb|Y|Cr|Y|Cb|Y|Cr|......Cb|Y|Cr|Y
.      *         * 
287	Cb|Y|Cr|Y|Cb|Y|Cr|Y|Cb|Y|Cr|......Cb|Y|Cr|Y   Field 1 End
.
.
575	Cb|Y|Cr|Y|Cb|Y|Cr|Y|Cb|Y|Cr|......Cb|Y|Cr|Y   Field 2 End

SIF Y=360*288 U=180*144 V=180*144

the '*'s in up views are the SIF datas coming from ITU656 datas;


***********************************************************************************************/

#define SOCKADDR struct sockaddr

void initbuf(char *,unsigned long);

int
main(int argc,char ** argv)
{
	int listenfd,
		echofd;
	struct sockaddr_in sockaddr_echo,
					   sockaddr_cli;
					   
	char * sendbuf,*YUV_buf,* Y_buf,* Cb_buf,* Cr_buf;
	int socklen,sbufsize;
	
	YUV_buf=(char *)malloc(sizeof(char)*YUV_Size);

#ifdef CIF

	Y_buf=(char *)malloc(sizeof(char)*CIF_YSize);
	Cr_buf=(char *)malloc(sizeof(char)*CIF_CbSize);
	Cb_buf=(char *)malloc(sizeof(char)*CIF_CrSize);
	
#endif
	
	initbuf(Y_buf,YUV_Size);
	
	sbufsize=ITU656_SIF(YUV_buf,Y_buf,Cb_buf,Cr_buf);
	
	sendbuf=(char *)malloc(sizeof(char)*sbufsize);
	
	

	

	listenfd=socket(AF_INET,SOCK_STREAM,0);
	if(listenfd<0){
		fprintf(stderr,"socket create error!\n");
		exit(1);
	}
	memset(&sockaddr_echo,0,sizeof(struct sockaddr_in));
	sockaddr_echo.sin_family=AF_INET;
	sockaddr_echo.sin_port=htons(7);
	sockaddr_echo.sin_addr.s_addr=htonl(INADDR_ANY);
	
	if(bind(listenfd,(struct sockaddr*)&sockaddr_echo,sizeof(struct sockaddr_in))<0){
		printf("bind error!\n");
		exit(2);
	}
	listen(listenfd,5);
	socklen=sizeof(SOCKADDR);
	for( ; ; ){
		echofd=accept(listenfd,(SOCKADDR *)(&sockaddr_cli),&socklen);
		printf("Connect come from %s %d\n",
				inet_ntoa(sockaddr_cli.sin_addr),ntohs(sockaddr_cli.sin_port));
/*		while((n=read(echofd,recmsg,BUFLEN))>0){
			recmsg[n]=0;
			printf("client sent:%s",recmsg);
			write(echofd,recmsg,n);
		}
*/
		n=writen(echofd,sendbuf,BUFLEN);
		printf("write n=%d\n",n);
		if(n==-1){
			fprintf(stderr,"write error in server socket!\n");
			exit(3);
		}
		printf("client %s closed!\n",inet_ntoa(sockaddr_cli.sin_addr));
	}
	
}

void initbuf(char *buf,unsigned long len)
{
/*	int i;
	for(i=0;i<1440;i++)
		buf[i]=i*256/1440;
*/

	int i,j;
	for(i=0;i<1440;i++)
		for(j=0;j<576;j++)
			buf[i*576+j]=i*256/1440;	
}



ssize_t ITU656_SIF(char *input,char *Y,char *Cb,char * Cr)
{
	int row,col;
	ssize_t count=0;
	
	for(row=0;row<288;row++)
		for(col=0;col<1440;col=col+8){
			/*是8的倍数的时候 提取数据*/
			if(row%2==0){
				/*when row is even,pick up Cb,Y,Cr;*/
				Cb++=input[row*1440+col];
	 			Y++=input[row*1440+col+1];
				Cr++=input[row*1440+col+2];
				Y++=inut[row*1440+col+5];
				count=count+4;
			}
			else {
				/*when row is odd,pick up Y only;*/
				Y++=input[row*1440+col+1];
				Y++=inut[row*1440+col+5];
				count=count+2;
			}
		}
	return count;
}

			
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -