嵌入式系统实验二Word文档下载推荐.docx

上传人:b****1 文档编号:368837 上传时间:2023-04-28 格式:DOCX 页数:22 大小:585.92KB
下载 相关 举报
嵌入式系统实验二Word文档下载推荐.docx_第1页
第1页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第2页
第2页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第3页
第3页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第4页
第4页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第5页
第5页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第6页
第6页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第7页
第7页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第8页
第8页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第9页
第9页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第10页
第10页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第11页
第11页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第12页
第12页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第13页
第13页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第14页
第14页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第15页
第15页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第16页
第16页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第17页
第17页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第18页
第18页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第19页
第19页 / 共22页
嵌入式系统实验二Word文档下载推荐.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

嵌入式系统实验二Word文档下载推荐.docx

《嵌入式系统实验二Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《嵌入式系统实验二Word文档下载推荐.docx(22页珍藏版)》请在冰点文库上搜索。

嵌入式系统实验二Word文档下载推荐.docx

stdlib.h>

strings.h>

string.h>

#defineSERVER_PORT20000//设置服务端口

#defineCLIENT_PORT((20001+rand())%65536)//设置客户端端口(随机)

#defineBUFFER_SIZE256

#defineLENGTH_OF_LISTEN_QUEUE10//可窃听队列长为10

#defineWELCOME_MESSAGE"

welcometoconnecttheserver."

 

voidusage(char*name)

{

printf("

usage:

%sIpAddr\n"

name);

}

structsockaddr_inservaddr,cliaddr;

intservfd,clifd,length=0;

socklen_tsocklen=sizeof(servaddr);

charbuf[BUFFER_SIZE],buf2[BUFFER_SIZE];

pthread_ttidp,tidp2;

intpth;

intrunflag=0;

void*Thread1(void*arg)/*等待runflag为1,当为1时清空buf,

同时接收来自server的数据并输出。

但当没有清空,则break.*/

{

while(runflag){

memset(buf,0,BUFFER_SIZE);

length=recv(clifd,buf,BUFFER_SIZE,0);

if(strstr(buf,"

$"

)>

0){runflag=0;

printf("

stop!

\n"

);

break;

}

if(length>

0)printf("

fromserver:

%s"

buf);

}

void*Thread2(void*arg)/*等待发送数据给Server*/

printf("

PleaseinputyourwordstoServer:

--$tostop\n"

memset(buf2,0,BUFFER_SIZE);

scanf("

buf2);

send(clifd,buf2,strlen(buf2),0);

if(strstr(buf2,"

intmain(intargc,char**argv)

if(argc<

2)

{

usage(argv[0]);

exit

(1);

}

if((clifd=socket(AF_INET,SOCK_STREAM,0))<

0)//用tcp定义socket

{

printf("

createsocketerror!

\n"

);

srand(time(NULL));

//initializerandomgenerator

bzero(&

cliaddr,sizeof(cliaddr));

cliaddr.sin_family=AF_INET;

cliaddr.sin_port=htons(CLIENT_PORT);

cliaddr.sin_addr.s_addr=htons(INADDR_ANY);

if(bind(clifd,(structsockaddr*)&

cliaddr,sizeof(cliaddr))<

0)

bindtoport%dfailure!

CLIENT_PORT);

}//绑定的目的是让其端口是随机的,否则端口是自增1

//一般情况下client端不用绑定

bzero(&

servaddr,sizeof(servaddr));

servaddr.sin_family=AF_INET;

inet_aton(argv[1],&

servaddr.sin_addr);

servaddr.sin_port=htons(SERVER_PORT);

if(connect(clifd,(structsockaddr*)&

servaddr,socklen)<

0)

can'

tconnectto%s!

argv[1]);

exit

(1);

runflag=1;

pth=pthread_create(&

tidp,NULL,Thread1,NULL);

if(pth!

=0){printf("

error!

"

return-1;

tidp2,NULL,Thread2,NULL);

pthread_detach(tidp);

pthread_detach(tidp2);

while(runflag){;

close(clifd);

return0;

4、服务端server.c编写

arpa/inet.h>

time.h>

sys/ioctl.h>

fcntl.h>

termios.h>

errno.h>

sys/time.h>

linux/rtc.h>

pthread.h>

#defineCOM00

#defineBLOCK_MODE1

#defineNONBLK_MODE0

#defineSERVER_PORT20000

#defineLENGTH_OF_LISTEN_QUEUE10

#defineQUEUE20

#defineBUFFER_SIZE256

staticstructtermiosg_newtio,g_oldtio;

staticintspeed_arr[]=

B115200,B57600,B38400,B19200,B9600,B4800,B2400,B1200,B300,

B115200,B57600,B38400,B19200,B9600,B4800,B2400,B1200,B300,

};

staticintname_arr[]=

115200,57600,38400,19200,9600,4800,2400,1200,300,

intInit_COM(intComm,intBaudrate,intParity,intStopbit,intFlagblock)

intret,i;

chardev_buf[16];

if(Comm>

3)

printf("

Com%dnotexist\n"

Comm);

return-1;

}

memset(dev_buf,0x00,sizeof(dev_buf));

sprintf(dev_buf,"

/dev/ttyS%d"

if(Flagblock)

{

ret=open(dev_buf,O_RDWR|O_NOCTTY);

//以默认阻塞方式打开

else

ret=open(dev_buf,O_RDWR|O_NOCTTY|O_NONBLOCK);

//以非阻塞方式打开

if(ret<

0)

printf("

OpenttyS%dfailed\n"

return-1;

if(tcgetattr(ret,&

g_oldtio)<

0)//保存原先的端口

GetComParameterError.\n"

for(i=0;

i<

sizeof(speed_arr)/sizeof(int);

i++)

{

if(Baudrate==name_arr[i])

{

cfsetispeed(&

g_newtio,speed_arr[i]);

/*设置输入输出波特率*/

cfsetospeed(&

break;

}

if(i>

=sizeof(speed_arr)/sizeof(int))

printf("

UnsupportedSpeed!

switch(Parity)

case'

n'

:

case'

N'

g_newtio.c_cflag&

=~PARODD;

=~PARENB;

break;

o'

O'

g_newtio.c_cflag|=PARENB;

g_newtio.c_cflag|=PARODD;

//奇校验

e'

E'

g_newtio.c_cflag|=PARENB;

//偶校验

default:

UnsupportedParity\n"

}

switch(Stopbit)//设置停止校验位是为2,否为1.

case1:

g_newtio.c_cflag&

=~CSTOPB;

break;

case2:

g_newtio.c_cflag|=CSTOPB;

default:

UnsupportedStopbit!

g_newtio.c_iflag=0;

g_newtio.c_oflag=0;

g_newtio.c_lflag=0;

g_newtio.c_cc[VTIME]=1;

//最大等待时间为1*100ms

g_newtio.c_cc[VMIN]=1;

//最小读数为1

g_newtio.c_iflag&

=~INPCK;

g_newtio.c_cflag&

=~CRTSCTS;

=~CSIZE;

//设置数据位

g_newtio.c_cflag|=CS8;

//

g_newtio.c_cflag|=CLOCAL;

g_newtio.c_cflag|=CREAD;

if(tcsetattr(ret,TCSANOW,&

g_newtio)!

=0)//激活设置

SetComParameterError!

tcflush(ret,TCIOFLUSH);

//刷新输入输出缓存

returnret;

//以上为套接字的相关定义

//一下类似与client一样设置数据接收和发送。

voidRestoreComConfiguration(intfd,structtermios*ptios)

if(tcsetattr(fd,TCSANOW,ptios)!

=0)

RestoreComParameterError!

intfd;

charbuf[1024],buf2[1024];

intservfd,clifd;

void*Thread1(void*arg)

read(fd,buf,1024);

send(clifd,buf,strlen(buf),0);

void*Thread2(void*arg)

intlength=0;

while(runflag){char

stdstr[1024]="

fromclient:

;

length=recv(clifd,buf2,1024,0);

if(length>

0)

strcat(stdstr,buf2);

strcat(stdstr,"

{runflag=0;

write(fd,stdstr,strlen(stdstr));

voidsocket_init(void)

if((servfd=socket(AF_INET,SOCK_STREAM,0))<

{printf("

createsocketerror!

exit

(1);

servaddr,sizeof(servaddr));

servaddr.sin_family=AF_INET;

servaddr.sin_port=htons(SERVER_PORT);

servaddr.sin_addr.s_addr=htons(INADDR_ANY);

if(bind(servfd,(structsockaddr*)&

servaddr,sizeof(servaddr))<

SERVER_PORT);

if(listen(servfd,QUEUE)<

{printf("

calllistenfailure!

socklen_tlength=sizeof(cliaddr);

clifd=accept(servfd,(structsockaddr*)&

cliaddr,&

length);

if(clifd<

0){printf("

errorcomeswhencallaccept!

intmain(intargc,char*argv[])

fd=Init_COM(COM0,115200,'

1,BLOCK_MODE);

socket_init();

pthread_ttidp,tidp2;

intpth;

if(fd>

=0)RestoreComConfiguration(fd,&

g_oldtio);

pth=pthread_create(&

if(pth!

pthread_detach(tidp);

pthread_detach(tidp2);

while(runflag){;

close(clifd);

close(fd);

close(servfd);

//全部关闭

编译结果:

5、nfs挂载

4、实验结果:

5、心得体会:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2