嵌入式课程设计实践(四)——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.在填写各函数的形参时,一定要注意原函数的数据类型要求,否则也会出现一些不明觉历的错误。
本篇没有详细的代码,因为前部分的代码别处太多了,后部分的代码我没有单独写的,只有整合了整个课设内容的代码,不合适贴在这,就不发了。
我做的是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.在填写各函数的形参时,一定要注意原函数的数据类型要求,否则也会出现一些不明觉历的错误。
本篇没有详细的代码,因为前部分的代码别处太多了,后部分的代码我没有单独写的,只有整合了整个课设内容的代码,不合适贴在这,就不发了。
相关文章推荐
- 嵌入式课程设计实践(五)——pthread
- 嵌入式课程设计实践(二)——串口
- 嵌入式课程设计实践(一)——环境搭建
- 嵌入式课程设计实践(三)——SQLite
- 嵌入式课程设计——温控器
- Web编程基础课程设计实践教学环节任务书(一)
- 课程设计——聚类分析的初步实践
- 一个嵌入式课程设计
- 哈工大嵌入式设计与实践实验七 驱动程序开发
- Sundy嵌入式底层开发课程笔记 --Vi的设计思想及使用
- 信息安全系统设计基础课程实践:简单TUI游戏设计
- FPGA嵌入式系统设计原理与实践
- stm8s 实践课程之IAP设计编码(bootloader实现)
- 广工嵌入式系统课程设计——单片机售票机
- 数据结构实践课程设计【通讯录管理系统】
- 求救高手课程设计!!嵌入式《浮点除法器的设计》
- 嵌入式 课程设计指导书
- 嵌入式软件开发培训笔记——基于S5PC100的课程设计
- 敏捷开发体验式培训设计与实践 令狐铁民/文
- 操作系统课程设计完成了