嵌入式作业.docx

上传人:b****8 文档编号:23889041 上传时间:2023-05-21 格式:DOCX 页数:13 大小:16.86KB
下载 相关 举报
嵌入式作业.docx_第1页
第1页 / 共13页
嵌入式作业.docx_第2页
第2页 / 共13页
嵌入式作业.docx_第3页
第3页 / 共13页
嵌入式作业.docx_第4页
第4页 / 共13页
嵌入式作业.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

嵌入式作业.docx

《嵌入式作业.docx》由会员分享,可在线阅读,更多相关《嵌入式作业.docx(13页珍藏版)》请在冰豆网上搜索。

嵌入式作业.docx

嵌入式作业

1.服务器源代码

#include//基本系统数据类型

#include//提供socket函数及数据结构

#include//标准输入输出

#include//标准库

#include//提供错误号errno的定义,用于错误处理

#include//字符串函数定义

#include//read函数、write函数和getpid函数等头文件

#include//主要是跟网卡和IP地址相关的定义

#include//linux系统定义文件状态所在的伪标准头文件

#include//操作文件描述符的一些特性

#defineSERVPORT2015//端口号

#defineBACKLOG10//最大请求数

#defineMAX_CONNECTED_NC10

#defineMAXDATASIZE32768//缓冲区长度

#defineFILE_NAME_MAX_SIZE512

intmain()

{

structsockaddr_inserver_sockaddr,client01_sockaddr,client02_sockaddr;

intsin_size,shoudaozijieshu;

intserver_fd,client01_fd,client02_fd;

intfile_open,file_write;

charbuf[MAXDATASIZE],temp[MAXDATASIZE],*IP1,*IP2;

char*filename;

if((server_fd=socket(AF_INET,SOCK_STREAM,0))==-1)//建立服务器socket连接

{

perror("socket");

exit

(1);

}

printf("socketsuccess!

\n");

//设置server_sockaddr相关参数

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);

//服务器绑定

if(bind(server_fd,(structsockaddr*)&server_sockaddr,sizeof(structsockaddr))==-1)

{

perror("bind");

exit

(1);

}

printf("bindsuccess!

\n");

//服务器监听

if(listen(server_fd,BACKLOG)==-1)

{

perror("listen");

exit

(1);

}

printf("listening...\n");

sin_size=sizeof(structsockaddr);

//等待客户1连接

if((client01_fd=accept(server_fd,(struct

sockaddr*)&client01_sockaddr,&sin_size))==-1)

{

perror("accept:

");

exit

(1);

}

else

{

memset(temp,0,sizeof(temp));

strcpy(temp,"successtologintheserver!

");

//等待客户2连接

if(send(client01_fd,temp,MAXDATASIZE,0)==-1)

{

perror("send");

exit

(1);

}

}

if((client02_fd=accept(server_fd,(structsockaddr*)&client02_sockaddr,&sin_size))==-1)

{

perror("accept:

");

exit

(1);

}

else

{

memset(temp,0,sizeof(temp));//从客户1接收文件内容

strcpy(temp,"successtologintheserver!

");

if(send(client02_fd,temp,MAXDATASIZE,0)==-1)

{

perror("send");

exit

(1);

}

}

memset(temp,0,sizeof(temp));//向客户2转发接收到的内容

strcpy(temp,"Youfriendhason-line,youcansend/acceptnow!

");

if((send(client01_fd,temp,MAXDATASIZE,0)==-1)||(send(client02_fd,temp,MAXDATASIZE,0)==-1))

{

perror("send");

exit

(1);

}

printf("fileuploadserverstarting...\n");

memset(buf,0,sizeof(buf));

if((shoudaozijieshu=recv(client01_fd,buf,MAXDATASIZE,0))==-1)

{

perror("recv");

exit

(1);

}

printf("buf:

%s\n",buf);

if(send(client02_fd,buf,MAXDATASIZE,0)==-1)

{

perror("send");

exit

(1);

}

printf("fileuploadsuccess!

\n");

close(file_open);

close(server_fd);

 

2.客户端1源代码

/**************客户端1的程序******************/

#include//标准输入输出

#include//标准库

#include//提供错误号errno的定义,用于错误处理

#include//字符串函数定义

#include//定义了与网络有关的结构,变量类型,宏,函数

#include//基本系统数据类型

#include//主要是跟网卡和IP地址相关的定义

#include//socket相关定义

#include//linux系统定义文件状态所在的伪标准头文件

#include//操作文件描述符的一些特性

#defineSERVPORT2015//端口号

#defineMAXDATASIZE32768//缓冲区长度

intmain(intargc,char*argv[])

{

intclient01_fd,message_send_num,message_recieve_num;

intfile_open,file_read;

charbuf[MAXDATASIZE];

char*filename,*p;

structhostent*host;

structsockaddr_inclient01_sockaddr;

voidmy_recvmsg(intmessage_recieve_num,intclient01_fd,char*buf);

if(argc<2)

{

fprintf(stderr,"pleaseentertheluqj'shostname(IP)!

\n");

exit

(1);

}

if((host=gethostbyname(argv[1]))==NULL)//地址解析函数

{

perror("gethostbyname");

exit

(1);

}

if((client01_fd=socket(AF_INET,SOCK_STREAM,0))==-1)//建立客户1连接

{

perror("socket");

exit

(1);

}

memset(&client01_sockaddr,0,sizeof(client01_sockaddr));

//设置client_sockaddr相关参数

client01_sockaddr.sin_family=AF_INET;

client01_sockaddr.sin_port=htons(SERVPORT);

client01_sockaddr.sin_addr.s_addr=inet_addr(argv[1]);

bzero(&(client01_sockaddr.sin_zero),8);

if(connect(client01_fd,(structsockaddr*)&client01_sockaddr,sizeof(structsockaddr))==-1)

{

perror("connect");

exit

(1);

}//主动发起对服务器的连接请求

printf("startconnecting...\n");

my_recvmsg(message_recieve_num,client01_fd,buf);//接收登入连接信息

my_recvmsg(message_recieve_num,client01_fd,buf);//接收开始聊天信息

filename="/home/luqj/workspace/client01/hello.c";

if((file_open=open(filename,O_RDONLY))==-1)//打开所要发送的文件

{

perror("openwilluploadfile");

exit

(1);

}

memset(buf,0,sizeof(buf));//将所要发送的内容写入buf

if((file_open=read(file_open,buf,MAXDATASIZE))==-1)

{

perror("readwilluploadfile");

exit

(1);

}

printf("%s\n",buf);

//客户1向服务器发送文件内容

if((message_send_num=send(client01_fd,buf,MAXDATASIZE,0))==-1)

{

perror("send");

exit

(1);

}

printf("filehasbeenuploadedsuccessfully!

\n");

close(file_open);

close(client01_fd);

}

voidmy_recvmsg(intmessage_recieve_num,intclient01_fd,char*buf)//接收信息函数

{

memset(buf,0,sizeof(buf));

if((message_recieve_num=recv(client01_fd,buf,MAXDATASIZE,0))==-1)

{

perror("recv");

exit

(1);

}

else

{

printf("%s\n",buf);

}

}

3.客户端2源代码

/*************************客户端2的程序***************************/

#include//标准输入输出

#include//标准库

#include//提供错误号errno的定义,用于错误处理

#include//字符串函数定义

#include//定义了与网络有关的结构,变量类型,宏,函数

#include//基本系统数据类型

#include//主要是跟网卡和IP地址相关的定义

#include//socket相关定义

#include//linux系统定义文件状态所在的伪标准头文件

#include//操作文件描述符的一些特性

//宏定义

#defineSERVPORT2015//端口号

#defineMAXDATASIZE32768//缓冲区长度

//主函数

intmain(intargc,char*argv[])

{

intclient02_fd;//文件标示符

intmessage_send_num,shoudaozijieshu;

intfile_open,file_write,file_read;

charbuf[MAXDATASIZE];

char*filename,*p;

structhostent*host;

structsockaddr_inclient02_sockaddr;

voidmy_recvmsg(intmessage_send_num,intclient02_fd,char*buf);

if(argc<2)

{

fprintf(stderr,"pleaseentertheluqj’shostname(IP)!

\n");

exit

(1);

}

if((host=gethostbyname(argv[1]))==NULL)//地址解析函数

{

perror("gethostbyname");

exit

(1);

}

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

建立客户2连接

AF_INET:

IPv4协议

SOCK_STREAM:

流式socket

0:

原始套接字除外

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

if((client02_fd=socket(AF_INET,SOCK_STREAM,0))==-1)

{

perror("socket");

exit

(1);

}

memset(&client02_sockaddr,0,sizeof(client02_sockaddr));//分配内存

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

设置client_sockaddr相关参数,初始化client02_sockaddr结构体

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

client02_sockaddr.sin_family=AF_INET;

client02_sockaddr.sin_port=htons(SERVPORT);

client02_sockaddr.sin_addr.s_addr=inet_addr(argv[1]);

bzero(&(client02_sockaddr.sin_zero),8);

//判断连接成功

if(connect(client02_fd,(structsockaddr*)&client02_sockaddr,sizeof(structsockaddr))==-1)

{

perror("connect");

exit

(1);

}

printf("startconnecting...\n");//主动发起对服务器的连接请求

my_recvmsg(message_send_num,client02_fd,buf);//接收登入连接信息

my_recvmsg(message_send_num,client02_fd,buf);//接收开始聊天信息

filename="/home/luqj/songyb/workspace/client02/rec/Hello.c";//客户2新建文件

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

打开对应路径下的文件,如果没有,则建立改文件。

0644表示文件所有者可读可写,同组用户、其他用户只能读。

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

if((file_open=open(filename,O_CREAT|O_TRUNC|O_WRONLY,0644))==-1)

{

perror("openlocalhostfile");

exit

(1);

}

memset(buf,0,sizeof(buf));//客户2接收从服务器转发过来的客户1的文件内容

if((message_send_num=recv(client02_fd,buf,MAXDATASIZE,0))==-1)

{

perror("recv");

exit

(1);

}

printf("buf:

%s\n",buf);

//客户2讲接收到的内容写入新建文件中

if(file_write=write(file_open,buf,sizeof(buf))==-1)

{

perror("writtingtofileerror");

exit

(1);

}

printf("filehasbeenuploadedsuccessfully!

\n");

close(file_open);

close(client02_fd);

}

//接收信息函数

voidmy_recvmsg(intmessage_send_num,intclient02_fd,char*buf)

{

memset(buf,0,sizeof(buf));

if((message_send_num=recv(client02_fd,buf,MAXDATASIZE,0))==-1)

{

perror("recv");

exit

(1);

}

else

{

printf("%s\n",buf);

}

}

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

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1