在虚拟机上面实现了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 通信的更多相关文章

  1. c#使用Socket实现局域网内通信

    服务器端代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Da ...

  2. 【.NET 与树莓派】i2c(IIC)通信

    i2c(或IIC)协议使用两根线进行通信(不包括电源正负极),它们分别为: 1.SDA:数据线,IIC 协议允许在单根数据线上进行双向通信--这条线既可以发送数据,也可以接收数据. 2.SCL:时钟线 ...

  3. 简单的Socket通信

    Socket简介 Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 服务端步骤: • socket:创建服务器socket ...

  4. 界面编程之QT的Socket通信20180730

    /*******************************************************************************************/ 一.linu ...

  5. Android基于UDP的局域网聊天通信

    代码地址如下:http://www.demodashi.com/demo/12057.html 记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + 演示效果 1. 开发环境 1.1 开发工具 ...

  6. 利用Socket通信

    网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP的封装 ...

  7. 我看不下去鸟。。。。Java和C#的socket通信真的简单吗?

    这几天在博客园上看到好几个写Java和C#的socket通信的帖子.但是都为指出其中关键点. C# socket通信组件有很多,在vs 使用nuget搜索socket组件有很多类似的.本人使用的是自己 ...

  8. php简单实现socket通信

    socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...

  9. Socket通信类

    package com.imooc; import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...

随机推荐

  1. KNN分类

    1. KNN简介 K近邻(K-Nearest Neighbor)简称KNN.它可以做分类算法,也可以做回归算法.个人经验:KNN在做分类问题时非常有效. 2. KNN算法思想 在样本空间中,我们认为两 ...

  2. 【教程】OBS直播推流教程(Windows & macOS)

    OBS Open Broadcaster Software | OBS (obsproject.com) Windows直播推流教程 Windows下OBS直播推流非常简单,本教程将会介绍,具体步骤如 ...

  3. hitcontraining_magicheap

    拿到题目例行检查 程序是64位的程序 保护几乎全开,试运行一下程序 十分明显的堆溢出的界面,将程序放入ida中,shift+f12发现了后门程序 进入main主函数进行查看 可以看到当,v3==486 ...

  4. 虎符2021线下赛pwn writeup

    jdt 一个图书管理系统,但并不是常规的堆题.edit和show函数可以越界.edit函数和show函数相互配合泄露libc基地址,将main函数的返回地址覆盖成onegadgets拿shell. f ...

  5. cron 获取下次运行时间(基于 C# + Quartz.NET)

    代码 Quartz 的 cron 支持秒,导致一些 cron 库无法准确的获得下次执行时间,这里使用 Quartz.Net 自带的方法来获取下次执行时间. //引用 Quartz CronExpres ...

  6. 小迪安全 Web安全 基础入门 第六天 - 信息打点-Web架构篇&域名&语言&中间件&数据库&系统&源码获取

    一 . Web架构 语言.常用的Web开发语言有PHP,Java,Python,JavaScript,.net等.具体可参考w3school的介绍. 中间件. (1)常见的Web服务器中间件:IIS. ...

  7. 【LeetCode】217. Contains Duplicate 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典统计词频 使用set 排序 日期 [LeetCo ...

  8. 【LeetCode】778. Swim in Rising Water 水位上升的泳池中游泳(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/swim-in- ...

  9. 【LeetCode】556. Next Greater Element III 解题报告(Python)

    [LeetCode]556. Next Greater Element III 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人 ...

  10. spoj - ACTIV - Activities

    ACTIV - Activities Ana likes many activities. She likes acrobatics, alchemy, archery, art, Arabic da ...