OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5309|回复: 5

关于linux网络应用程序的问题

[复制链接]

3

主题

25

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1089
金钱
1089
注册时间
2017-11-12
在线时间
118 小时
发表于 2020-10-28 10:53:29 | 显示全部楼层 |阅读模式
2金钱
本帖最后由 ciolcs 于 2020-11-21 15:25 编辑

1.需求:我现在想用网口eth0连接一个ip,开发板做客户端,连接到服务器上。然后用网口eth1连接到另一个ip,拿开发板服务端,连接另一个客户端ip。
2.说明:我的开发板既是客户端又是服务端,使用两个网口eth0和eth1。
3.用途:通过开发板eth1传输采集的设备信息到开发板,然后把开发板的信息通过eth0转发到云服务器上。
因为对linux应用开发不了解,然后这个只是一个想法,也不知道可行性,想请大家提供一些思路。
----------------------2020.10.28 -19:00-------------------------------------------------------------------------------------------------
我在这里添加一个简单的网络通信应用程序:
说明:这里是根据别人的一份源码修改的,代码改的有点乱!
修改对应的ip地址和选择客户端还是服务端,就可以直接在开发板或者ubuntu运行的。文件名:netApp
现在代码有一个雏形,找了网上用套接字的资料,流程大概像代码那样。

实际问题:
1.我想的是eth0跟客户端通信,自己做服务端。eth1跟服务端通信,自己做客户端。这样分两根网线,两条路同时通信。
2.实际上是只能用eth0来通信,eth1完全不起作用。我也不知道怎么和eth0、eth1关联。
3.而且客户端和服务端只能二选一,我试过轮循的方式结果还是只能连接其中一个用户端。

问题:
1.eth0、eth1和socket有什么关联?要修改哪方面的内容才能像我想的那样工作?
2.实现我那种通信方式大概软件流程是什么样的?
-----------------------2020.10.28-20:00-------------------------------------------------------------------------------------------
1.经过朋友的提示,可以添加静态路由的方式,用特定的网卡跟相应的ip通信。
route add -net 192.168.4.0/24 gw 192.168.4.1 dev eth1
-----------------------2020.10.29-11:24-------------------------------------------------------------------------------------------
1.在etc/init.d/rcS中修改静态路由为:
up route add -net 192.168.4.0/24 gw 192.168.4.1 dev eth1
-----------------------2020.11.21-15:11-------------------------------------------------------------------------------------------
1.阿尔法开发板上的两个网口eth0和eth1,可以用上述设置静态路由的方法,让一个网口走内网,一个网口走外网。
2.网络客户端和服务端用套接字函数即可,百度了很多教程,跟着做就行。
3.写应用程序不用太关心底层的东西,网络驱动是用正点原子教程修改好的,现在已经可以实现上述的功能了。





netApp.rar

1.61 KB, 下载次数: 5

最佳答案

查看完整内容[请看2#楼]

好的,谢谢提示!我再修改下程序再更新。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

25

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1089
金钱
1089
注册时间
2017-11-12
在线时间
118 小时
 楼主| 发表于 2020-10-28 10:53:30 | 显示全部楼层
s2333 发表于 2020-10-29 11:39
从你贴出来的代码看,连绑定eth0和eth1都没有;
               setsockopt(listenfd, SOL_SOCKET, SO_REU ...

好的,谢谢提示!我再修改下程序再更新。
回复

使用道具 举报

2

主题

712

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2178
金钱
2178
注册时间
2018-8-27
在线时间
258 小时
发表于 2020-10-28 17:07:55 | 显示全部楼层
帮顶!
回复

使用道具 举报

3

主题

187

帖子

0

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
558
金钱
558
注册时间
2019-5-22
在线时间
267 小时
发表于 2020-10-28 17:37:25 | 显示全部楼层
可以的,他有两个网口,用socket通信传递。你先写个简单程序,让板子跟Ubuntu 之前传递图片。然后在往后进行调试
回复

使用道具 举报

3

主题

25

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1089
金钱
1089
注册时间
2017-11-12
在线时间
118 小时
 楼主| 发表于 2020-10-28 19:44:08 | 显示全部楼层
人淡如菊 发表于 2020-10-28 17:37
可以的,他有两个网口,用socket通信传递。你先写个简单程序,让板子跟Ubuntu 之前传递图片。然后在往后进 ...

你好!我是用网络助手调试,socket了解一点,bind函数绑定端口了,但是不明白和eth0,eth1网口有什么关联?
回复

使用道具 举报

2

主题

80

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1028
金钱
1028
注册时间
2019-1-5
在线时间
243 小时
发表于 2020-10-29 11:39:49 | 显示全部楼层
从你贴出来的代码看,连绑定eth0和eth1都没有;
               setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (void *)&optval, sizeof(optval));
你搜一下setsockopt()函数,这就是用来绑定eth1的,你这里optval变量需要 optval=“eth1”赋值才对;
还有,服务端是做侦听的,用的accept()函数等待连接,没有主动连接到客户端的吧;

其次,做服务端和做客户端需要不同的绑定,也就是说要分开绑定,你贴的代码我没看到客户端的绑定动作,而且客户端需要主动连接到服务端;

最后,推荐你百度搜索eth分别做客户端和服务端的示例代码,最后再整合,这种示例很多,写的都很清楚...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 18:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表