树莓派和荔枝派,局域网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 ...
随机推荐
- MISC常见题型整理
题目打包在这里 提取码:fhkb MISC 流量包分析 流量包_1 流量包_2 流量包_3 图片隐写 图片隐写_1 图片隐写_2 图片隐写_3 图片隐写_4 图片隐写_5 图片隐写_6 音频隐写 音频 ...
- CF1437A Marketing Scheme 题解
Content 有 \(t\) 组询问,每组询问给定两个整数 \(l,r\),问是否存在一个 \(a\),使得 \(\forall x\in[l,r]\),都有 \(x\mod a\geqslant\ ...
- Django的Form表单验证
Form(from django import forms) 简短理解:后端提供了一个类:from django import forms,继承此类定义子类.子类中定义和form表单中提交到name名 ...
- 当是class com.cosl.po.Pc$$EnhancerByCGLIB$$38c58f03时,反射属性都他妈不好用了
当是class com.cosl.po.Pc$$EnhancerByCGLIB$$38c58f03时,反射属性都他妈不好用了 搞不懂为什么?
- powerdesigner 连接数据库
powerdesigner 连接数据库如图:
- [C# Expression] 之基础概念
00 | 什么是表达式树 表达式树以树形数据结构表示代码,其中每一个节点都是一种表达式,比如方法调用和 x < y 这样的二元运算等.可以对表达式树中的代码进行编辑和运算. 这样能够动态修改可执 ...
- List集合取其中指定几条数据
newList= oldList.subList(start, end); start,end分别是第几个到第几个,截取的内容包含前不包含结尾,用下标索引 此方法会改变原始list列表,返回的这个子列 ...
- JS设置网站所有字体变为繁体字
引入chinese.js var zh_default='n';var zh_choose='t';var zh_expires=7;var zh_class='zh_click';var zh_st ...
- FastAPI(六十五)实战开发《在线课程学习系统》基础架构的搭建
在之前三篇,我们分享的就是需求的分析,基本接口的整理,数据库链接的配置.这次我们分享项目的基本框架,目录结构如下: common目录 通用的目录,一些通用的处理放在这里 models目录 数据库相关的 ...
- 7、滑动窗口套路算法框架——Go语言版
前情提示:Go语言学习者.本文参考https://labuladong.gitee.io/algo,代码自己参考抒写,若有不妥之处,感谢指正 关于golang算法文章,为了便于下载和整理,都已开源放在 ...