您的位置:首页 > 其它

嵌入式课程设计实践(四)——socket

2014-06-30 20:36 302 查看
本篇主要内容是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

(2)socket的初始化设置

intsocket(int domain, int type,int protocol)

(3)sendto()函数,用来将数据由指定的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

(2)socket的初始化设置
(3)recvfrom()函数,用来接收远程主机经指定的socket传来的数据

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

(4)bind()函数,用来绑定本地的接收端口

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

这两个端具体的代码我就不贴代码了,网上很多。

如果要既有发送又有接收,那么就只要把他们两个整合在一起:

(1)socket()初始化;
(2)设置自己的sockaddr,my_addr;
(3)设置对方的sockaddr,their_addr;
(4)bind()绑定自己的地址;
(5)sendto()
(6)recvfrom()

//注意:recvfrom()在未收岛信息时会一直监听端口,导致阻塞,所以另一端一定也要相应的设置recvfrom()和send(),这样才能让程序顺利执行。

另外,在编写代码时,还要注意两点:

1.在含有赋值与比较的地方要及时加括号,防止出现出乎意料的错误,从而找不到错误在何处。
2.在填写各函数的形参时,一定要注意原函数的数据类型要求,否则也会出现一些不明觉历的错误。

本篇没有详细的代码,因为前部分的代码别处太多了,后部分的代码我没有单独写的,只有整合了整个课设内容的代码,不合适贴在这,就不发了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: