嵌入式課程設計實踐(四)——socket


      本篇主要內容是socket,是本次課設的重點之一,本該非常用心認真的寫一篇分析,可是自己對它的認識還不夠,沒有任何思路,就不寫太多了,就對其整體做個大概的整理吧。


      我做的是UDP通信,故與UDP無關的就不管了==


一、基本函數

client

      本部分在socket通信上的要求有三:

1)對方的sockaddr,結構體structsockaddr_in their_addr;

their_addr.sin_family= AF_INET; // host byte order

their_addr.sin_port= htons(HEPORT); // short, network byte order

their_addr.sin_addr= *((struct in_addr *)he->h_addr);//their address

memset(&(their_addr.sin_zero),'\0', 8); // zero the rest of the struct

2socket的初始化設置

intsocket(int domain, int type,int protocol)

3sendto()函數,用來將數據由指定的socket傳給對方主機

intsendto ( socket s , const void * msg, int len, unsigned int flags,conststruct sockaddr * to , int tolen ) ;


Server

      本部分要求有四:

1)本機的sockaddr,結構體structsockaddr_in my_addr;

my_addr.sin_family= AF_INET; // host byte order

my_addr.sin_port= htons(MYPORT); // short, network byte order

my_addr.sin_addr.s_addr= INADDR_ANY; // automatically fill with my IP

memset(&(my_addr.sin_zero),'\0', 8); // zero the rest of the struct

2socket的初始化設置

3recvfrom()函數,用來接收遠程主機經指定的socket傳來的數據

ssize_t recvfrom(int sockfd,void *buf,int len,unsigned int flags, struct sockaddr *from,socket_t *fromlen);

4bind()函數,用來綁定本地的接收端口

int bind(int sockfd, struct sockaddr *my_addr, int addrlen)


      這兩個端具體的代碼我就不貼代碼了,網上很多。


      如果要既有發送又有接收,那麼就只要把他們兩個整合在一起:

1socket()初始化;

2)設置自己的sockaddrmy_addr;

3)設置對方的sockaddrtheir_addr;

4bind()綁定自己的地址;

5sendto()

6recvfrom()

      //注意:recvfrom()在未收島信息時會一直監聽端口,導致阻塞,所以另一端一定也要相應的設置recvfrom()send(),這樣才能讓程序順利執行。


      另外,在編寫代碼時,還要注意兩點:

1.在含有賦值與比較的地方要及時加括號,防止出現出乎意料的錯誤,從而找不到錯誤在何處。

2.在填寫各函數的形參時,一定要注意原函數的數據類型要求,否則也會出現一些不明覺歷的錯誤。


      本篇沒有詳細的代碼,因爲前部分的代碼別處太多了,後部分的代碼我沒有單獨寫的,只有整合了整個課設內容的代碼,不合適貼在這,就不發了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章