微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 电源设计 > PXA270嵌入式系统在Socket通信的应用

PXA270嵌入式系统在Socket通信的应用

时间:12-08 来源:互联网 点击:

求(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。

客户端可以向服务器端发送连接请求,并且客户端也可以接收到来自服务器端发送回来的数据。客户端可以判断当前自己的工作状态,如连接的建立,启动的成功和数据包通信的个数等。客户端程序设计主要按以下的步骤完成函数的调用:

①建立自己的Socket(并验证建立成功);

②启动连接(并验证建立成功);

③返回连接信息;

④接收收到的数据;

⑤判断数据的属性。

客户端程序设计的程序基本流程如图3所示。

图3 客户端程序简单示意图

客户端打开通信通道,并连接到服务器所在主机的特定端口,向服务器发送请求报文,等待并接收应答,请求结束后关闭通信通道并终止通信。客户端主要程序如下:

Int main(int argc,char *argv[])

if(argc!=3)

printf("error!!!please enter the remote IP and PORT please!!! the form like 192.168.0.* 4000");

mysocket=socket(AF_INET,SOCK_STREAM,0); //建立一个套接字

if(mysocket==-1)

printf("error!!! failed to created the new socket,program end here");

printf("OK-- you have successful created a socket named mysocket");

return(0); //socket 建立不成功,回初始位置

connectcheck=connect(mysocket,(struct sockaddr*)&addr_remote,sizeof(struct sockaddr));

//调用connect函数连接服务器端

if(connectcheck==-1)

printf("error!!!sorry you have failed to connect the remote server!!try again !program end here");

// connect不成功回初始位置

printf("OK-- Now you have successful connect the server,this server IP =%s,and it's PORT =%s,now you can communicat with this server!!!!!!!",argv[1],argv[2])

//打印服务器IP地址和端口号

while(1)

bzero(gotbuffer,long);

number=recv(mysocket,gotbuffer,long,0);

//调用阻塞函数

if(number==-1)

printf("error!!! some thing wrong !let you can not got the data form server,program end here");

return(0);

gotbuffer[number]='\0';

close(mysocket);3.2 服务器端程序设计

服务器端可以快速的做出客户端的连接请求反映,服务器端反映来自客户端的连接参数,如连接的IP、连接时间、连接的当前状态等。服务器启动后根据请求提供以下服务:

①打开通信通道并告知本地主机,在某一公认地址上接收客户请求;

②等待客户请求到达该端口;

③接收到重复服务请求,处理该请求并发送应答信号;

④返回第二步,等待另一客户请求;

⑤关闭服务器。

服务器端程序设计的流程如图4所示。

客户端与服务器端进程的作用是非对称的,因此编码不同。同时,服务器进程一般是先于客户请求请求而启动的,只要系统运行,该服务进程一直存在,直到正常或强迫终止。服务器端主要程序如下:

mysocket=socket(AF_INET,SOCK_STREAM,0);

//建立新的套接字

if(mysocket==-1)

printf("error!!! failed to created mysocket");

return(0); //socket建立不成功,回初始位置

mybindcheck=bind(mysocket,(struct sockaddr*)&addr_local,sizeof(struct sockaddr));

if(mybindcheck==-1)

printf("error!!!failed to bind the IP and port with mysocket");

return(0);

图4 服务器端程序简单示意图

{ printf("OK--you have successed bind your IP with port %d",port);

listencheck=listen(mysocket,howmany);

if(listencheck==-1)

printf("error!!! you have failed listen this port,program end here");

return(0); //调用监听函数

sin_size=sizeof(struct sockaddr_in);

newsocket=accept(mysocket,(struct sockaddr*)&addr_remote,&sin_size);

//调用接收函数

if(newsocket==-1)

printf("error!!!failed to got remote connect this server,program end here");

return(0); //建立新的socket失败返回

printf("OK-- now have created the newsocket to use this own connection,use this communicate with clint%s",inet_ntoa(addr_remote.sin_addr),port);

printf("OK-- server have successed got connect from clint IP = %s,port = %d,now connecting is running;",inet_ntoa(addr_remote.sin_addr),port)

pid_t pid;

pid=fork(); //调用fork()建立子进程

if(pid>0)

printf("OK-- i am a father procces,child proccess will continue for you,it's ID= %d,now end newsock and use old socket to listen again…… ",pid);

close(newsocket);

printf("OK-- i am a child procces,i am responsible for

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top