嵌入式学习日记(十二)
2019-07-12 18:08发布
生成海报
2017-07-20
今天是嵌入式学习的第十二天
今天在受到老师的指引下,写一个简单的练手小程序。
关键字:Socket Internet,UDP协议,Internet版本IPv4
- 话不多说,首先来看头文件(server和client都一样):
#include
#include
#include
#include
#include
具体头文件的一些函数啥的,请大家自行man。
- 再定义一些方便的宏(server和client都一样):
#define PORT 8888
#define IPADDR "127.0.0.1"
int main()
{
int sock_fd;
struct sockaddr_in sock_in;
char buffer[1024];
socklen_t len=sizeof(struct sockaddr_in);
if(sock_fd=socket(AF_INET,SOCK_DGRAM,0)<0)
{
perror("socket error!
");
return 1;
}
sock_in.sin_family = AF_INET;
sock_in.sin_port = htons(PORT);
sock_in.sin_addr.s_addr = inet_addr(IPADDR);
bind(sock_fd,(struct sockaddr *)&sock_in,
sizeof(struct sockaddr_in));
while(1)
{
socket_in ipaddr;
char ipstr[16];
recvfrom(sock_fd,buffer,sizeof(buffer),0,
(struct sockaddr *)&ipaddr,&len);
inet_ntop(AF_INET,&ipaddr.sin_addr,ipstr,16);
printf("%s :%s
",ipstr,buffer);
}
close(sock_fd);
return 0;
}
- 客户端源代码和服务器的差不多,只不过是没有bind(),并且接收换成发送即可
int main()
{
int sock_fd;
struct sockaddr_in server;
char buffer[1024];
sock_fd=socket(AF_INET,SOCK_DGRAM,0);
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr.s_addr = inet_addr(IPADDR);
while(1)
{
scanf("%s",buffer);
sendto(sock_fd,buffer,sizeof(buffer),0,
(struct sockaddr *)&server,sizeof(struct sockaddr_in));
}
close(sock_fd);
return 0;
}
好了,干货就这么多,不止可以在同一台电脑上执行,只需要将IPADDR的宏修改成server的IP地址,就可以由client向server发消息了!
今日学会了socket编程的基础。以后还要在这基础上修改。
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮