树莓派和荔枝派,局域网socket 通信
在虚拟机上面实现了socket 之间的通信之后,突发奇想,想要实现树莓派和 荔枝派zero之间的通信。
1.直接将虚拟机下面的程序复制过来,重新编译并且运行。发现是没有办法进行通信的。客户端一直报错:connect error: Connection refused 在网上查找了很多文档之后,也没有发现问题的所在。
2..在经历过各种魔改之后,终于发现了问题的所在,就是IP地址的问题。开始时,IP是 INADDR_ANY ,后来改成inet_addr();就报错bind error: Cannot assign requested address 。在网上查看之后,发现这个错误的缘由是IP地址不能随意填写。需要使服务器端的主机IP地址,然后改成服务器端的主机IP地址之后,就能够正常通信了。
#include <arpa/inet.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <pthread.h> #define SERVER_PORT 9527 void *server_handle(void *argc)
{
int con_fd =*((int*)argc);
ssize_t len;
char buf[100];
while(1)
{
len = read(con_fd,buf,100);
if(len <0)
{
perror("read error");
exit(1);
}
else if(len ==0)
{
break;
}
len = write(con_fd,buf,len);
if(len <0)
{
perror("write error");
exit(1);
}
}
close(con_fd);
pthread_exit(NULL);
}
int main(void)
{
int sock_fd,acc_fd;
int ret;
socklen_t sock_len;
pthread_t thread_id;
struct sockaddr_in bind_addr, acc_addr;
sock_fd =socket(AF_INET,SOCK_STREAM,0);
if(sock_fd <0)
{
perror("socket error");
exit(1);
} bind_addr.sin_port =htons(SERVER_PORT);
bind_addr.sin_family = AF_INET;
bind_addr.sin_addr.s_addr = inet_addr("192.168.2.102");
ret = bind(sock_fd,(struct sockaddr*)&bind_addr,sizeof(bind_addr));
if(ret <0)
{
perror("bind error");
exit(1);
}
ret = listen(sock_fd,20);
if(ret < 0)
{
perror("listen error");
exit(1);
}
while(1)
{
acc_fd = accept(sock_fd,(struct sockaddr *)&acc_addr,&sock_len);
if(acc_fd < 0)
{
perror("accpet error");
exit(1);
}
pthread_create(&thread_id,NULL,server_handle,(void *)&acc_fd);
pthread_detach(thread_id);
}
close(sock_fd);
return 0;
}
#include <arpa/inet.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <pthread.h> #define SERVER_PORT 9527 void *server_handle(void *argc)
{
int con_fd =*((int*)argc);
ssize_t len;
char buf[100];
while(1)
{
len = read(con_fd,buf,100);
if(len <0)
{
perror("read error");
exit(1);
}
else if(len ==0)
{
break;
}
len = write(con_fd,buf,len);
if(len <0)
{
perror("write error");
exit(1);
}
}
close(con_fd);
pthread_exit(NULL);
}
int main(void)
{
int sock_fd,acc_fd;
int ret;
socklen_t sock_len;
pthread_t thread_id;
struct sockaddr_in bind_addr, acc_addr;
sock_fd =socket(AF_INET,SOCK_STREAM,0);
if(sock_fd <0)
{
perror("socket error");
exit(1);
} bind_addr.sin_port =htons(SERVER_PORT);
bind_addr.sin_family = AF_INET;
bind_addr.sin_addr.s_addr = inet_addr("192.168.2.102");
ret = bind(sock_fd,(struct sockaddr*)&bind_addr,sizeof(bind_addr));
if(ret <0)
{
perror("bind error");
exit(1);
}
ret = listen(sock_fd,20);
if(ret < 0)
{
perror("listen error");
exit(1);
}
while(1)
{
acc_fd = accept(sock_fd,(struct sockaddr *)&acc_addr,&sock_len);
if(acc_fd < 0)
{
perror("accpet error");
exit(1);
}
pthread_create(&thread_id,NULL,server_handle,(void *)&acc_fd);
pthread_detach(thread_id);
}
close(sock_fd);
return 0;
}
树莓派和荔枝派,局域网socket 通信的更多相关文章
- c#使用Socket实现局域网内通信
服务器端代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Da ...
- 【.NET 与树莓派】i2c(IIC)通信
i2c(或IIC)协议使用两根线进行通信(不包括电源正负极),它们分别为: 1.SDA:数据线,IIC 协议允许在单根数据线上进行双向通信--这条线既可以发送数据,也可以接收数据. 2.SCL:时钟线 ...
- 简单的Socket通信
Socket简介 Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 服务端步骤: • socket:创建服务器socket ...
- 界面编程之QT的Socket通信20180730
/*******************************************************************************************/ 一.linu ...
- Android基于UDP的局域网聊天通信
代码地址如下:http://www.demodashi.com/demo/12057.html 记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + 演示效果 1. 开发环境 1.1 开发工具 ...
- 利用Socket通信
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP的封装 ...
- 我看不下去鸟。。。。Java和C#的socket通信真的简单吗?
这几天在博客园上看到好几个写Java和C#的socket通信的帖子.但是都为指出其中关键点. C# socket通信组件有很多,在vs 使用nuget搜索socket组件有很多类似的.本人使用的是自己 ...
- php简单实现socket通信
socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...
- Socket通信类
package com.imooc; import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...
随机推荐
- KNN分类
1. KNN简介 K近邻(K-Nearest Neighbor)简称KNN.它可以做分类算法,也可以做回归算法.个人经验:KNN在做分类问题时非常有效. 2. KNN算法思想 在样本空间中,我们认为两 ...
- 【教程】OBS直播推流教程(Windows & macOS)
OBS Open Broadcaster Software | OBS (obsproject.com) Windows直播推流教程 Windows下OBS直播推流非常简单,本教程将会介绍,具体步骤如 ...
- hitcontraining_magicheap
拿到题目例行检查 程序是64位的程序 保护几乎全开,试运行一下程序 十分明显的堆溢出的界面,将程序放入ida中,shift+f12发现了后门程序 进入main主函数进行查看 可以看到当,v3==486 ...
- 虎符2021线下赛pwn writeup
jdt 一个图书管理系统,但并不是常规的堆题.edit和show函数可以越界.edit函数和show函数相互配合泄露libc基地址,将main函数的返回地址覆盖成onegadgets拿shell. f ...
- cron 获取下次运行时间(基于 C# + Quartz.NET)
代码 Quartz 的 cron 支持秒,导致一些 cron 库无法准确的获得下次执行时间,这里使用 Quartz.Net 自带的方法来获取下次执行时间. //引用 Quartz CronExpres ...
- 小迪安全 Web安全 基础入门 第六天 - 信息打点-Web架构篇&域名&语言&中间件&数据库&系统&源码获取
一 . Web架构 语言.常用的Web开发语言有PHP,Java,Python,JavaScript,.net等.具体可参考w3school的介绍. 中间件. (1)常见的Web服务器中间件:IIS. ...
- 【LeetCode】217. Contains Duplicate 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典统计词频 使用set 排序 日期 [LeetCo ...
- 【LeetCode】778. Swim in Rising Water 水位上升的泳池中游泳(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/swim-in- ...
- 【LeetCode】556. Next Greater Element III 解题报告(Python)
[LeetCode]556. Next Greater Element III 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人 ...
- spoj - ACTIV - Activities
ACTIV - Activities Ana likes many activities. She likes acrobatics, alchemy, archery, art, Arabic da ...