基于S3C44B0X的嵌入式Socket通信實現(xiàn)
本設計使用的套接字為流式套接字,下面是運行于32位微處理器S3C44B0X嵌入式開發(fā)平臺的客戶端應用程序:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc,char *argv[])
{
int s;
char buffer[256];
struct sockaddr_in addr;
struct hostent *hp;
struct in_addr in;
struct sockaddr_in local_addr;
if (argc 2) return;
if(?。╤p=gethostbyname (argv[1]))){
fprintf(stderr,"Can't resolve host.");
exit (1);
}
if ((s = socket(AF_
INET,SOCK_STREAM,0)) 0){
perror ("socket");
exit (1);
}
bzero (addr,sizeof (addr));
addr.sin_family = AF_INET;
addr.sin_port=htons((unsigned short)atoi(argv[2]));
hp = gethostbyname(argv[1]);
memcpy(local_addr.sin_addr.s_addr,hp->h addr,4);
in.s_addr = local_addr.sin_addr.s_addr;
printf ("Domain Name %s" argv
printf ("IP address :%s",inet_ntoa (in));
printf("%s,%s",hp->h_name,argv[2]);
addr.sin_addr.s_addr=inet_addr(hp->h_name);
if connect(s,(struct sockaddr *)addr,sizeof (addr))0){
perror ("connect");
exit (1);
}
recv (s,buffer,sizeof (buffer),0);
printf ("%s",buffer);
while(1);
bzero(buffer,sizeof (buffer));
read (STDIN_FILENO,buffer,sizeof(buffer));
if (send (s,buffer,sizeof (buffer),0)0){
perror ("send");
exit (1);
}
}
}
4 結束語
設計開發(fā)了基于S3C44B0X的以太網通信系統(tǒng),并利用uClinux操作系統(tǒng)強大的網絡功能實現(xiàn)了Socket通信。由于uClinux目前只支持flat格式的可執(zhí)行文件,因此本設計是在先建立好uClinux開發(fā)環(huán)境的情況下,把用戶自行開發(fā)的應用程序通過宿主PC機上的交叉編譯器轉化為flat格式,然后再通過FTP添加到目標硬件開發(fā)平臺上運行的。文中的客戶端應用程序已經在基于ARM7TDMI核的S3C44B0X處理器的嵌入式開發(fā)平臺上成功運行,并成功地和宿主PC機的服務器端應用程序實現(xiàn)了Socket通信。當然,也可以把目標硬件開發(fā)平臺當作服務器端,而把宿主PC機當作客戶端來進行雙向文件傳輸。
參考文獻:
[1].RS232datasheethttp://www.dzsc.com/datasheet/RS232_585128.html.
[2].RS485datasheethttp://www.dzsc.com/datasheet/RS485_585289.html.
[3].S3C44B0Xdatasheethttp://www.dzsc.com/datasheet/S3C44B0X_.html.
[4].RISCdatasheethttp://www.dzsc.com/datasheet/RISC_1189725.html.
[5].ARM7TDMIdatasheethttp://www.dzsc.com/datasheet/ARM7TDMI_2.html.
[6].CS8900Adatasheethttp://www.dzsc.com/datasheet/CS8900A_593567.html.
評論