树莓派和荔枝派,局域网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 ...
随机推荐
- [BUUCTF]PWN——bjdctf_2020_router
bjdctf_2020_router 附件 步骤: 例行检查,64位程序,开启了NX保护 本地试运行一下程序,看看大概的情况 会让我们选择,选择4.root,没什么用,但是注意了,这边选1会执行pin ...
- 工期设定(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 任务录入好以后,就得安排工期了不是,要不然每一个任务都如自动设置的从今天开始一个工作日内完成,这么简单的话,还要Proje ...
- AtCoder Beginner Contest 184 题解
AtCoder Beginner Contest 184 题解 目录 AtCoder Beginner Contest 184 题解 A - Determinant B - Quizzes C - S ...
- CF1443A Kids Seating 题解
Content 有 \(t\) 组询问,每组询问给定一个数 \(n\),试构造出一个长度为 \(n\) 的数列 \(\{a_i\}_{i=1}^n\),使得: \(\forall i\in[1,n], ...
- Python第三周 数据类型:集合set、文件的读写、追加操作。
集合 知识点:集合是无序的 格式:{1,2,3,"str_test"} set_1 = set(list1)#将列表转换为集合 集合关系测试: 集合的逻辑判断.取交集.并集.差集. ...
- Sublime Text3 Package Control Emmet插件安装
https://www.cnblogs.com/carrie-hong/p/4995735.html https://www.cnblogs.com/tamato-jacob-wealllostcon ...
- JAVA地址通过百度地图API转化为经纬度
public static Map getLngAndLat(String address) { Map map = new HashMap(); String url = "http:// ...
- PC chrome开启自带的dark mode
地址 复制下面的地址到chrome地址栏打开,再设置为 Enable 就可以开启了. chrome://flags/#enable-force-dark
- c++ 设计模式概述之享元
类写的不够规范,目的是为了缩短篇幅,实际中其不要这样做. 参考文章: 1. http://c.biancheng.net/view/1371.html 1.概述 A.享元,我的理解是: 共享的模块单元 ...
- 【LeetCode】11. Container With Most Water 盛最多水的容器
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:盛水,容器,题解,leetcode, 力扣,python ...