您好我想把苹果手机接收不到wifi通过wifi模块接收到下位机的测量数据发送到电脑端,通过socket电脑做服务器,求大神帮忙

基于Socket的Linux与Windows下WiFi模块间通信的实现
基于Socket的Linux与Windows下WiFi模块间通信的实现
摘 要: 为了实现Linux开发环境下的总控制器与Windows开发环境下分节点之间的数据进行无线传输,提出用Socket的方法解决它们所带WiFi模块之间的无线通信。该方法能够实现数据的正常传输,并能把数值准确地显示出来。Socket的使用比较简单,不会对整体系统增加太多代码量。这样开发出来的总控制器与分节点之间的通信,传输速率快、误码率低、容易实现,具有很强的实用价值。关键词: 嵌入式Linu
摘 要: 为了实现Linux开发环境下的与Windows开发环境下之间的数据进行无线传输,提出用的方法解决它们所带模块之间的无线通信。该方法能够实现数据的正常传输,并能把数值准确地显示出来。Socket的使用比较简单,不会对整体系统增加太多代码量。这样开发出来的总控制器与分节点之间的通信,传输速率快、误码率低、容易实现,具有很强的实用价值。关键词: ;WiFi;Socket;总控制器;分节点 现如今无线通信的方式越来越多,组网模式也千姿百态。一般研究同种操作系统下的Socket或WiFi通信的比较多,但在两种系统开发环境下WiFi之间的通信研究却并不多。众所周知,Linux操作系统由于其系统源码的自由和开放性,以及系统性能的稳定性,被广泛用作服务器的操作系统。而Windows由于其友好的图形界面和强大的编程环境,常被广泛用作客服端的开发环境和操作系统[1]。因此,研究两大操作系统的实时通信问题具有一定的现实意义。 本文主要研究嵌入式Linux下的ARM与Windows环境开发下的STC80C51单片机之间的无线通信问题,通过套接字编程由WiFi进行传输,成功实现了两大开发环境下数据的无线传输,基本解决了两者之间的通信问题。1 Socket原理 Socket通常称作&套接字&,用于描述IP地址和端口,是一个通信链的句柄。在客户端/服务器通信模型中,Socket是网络通信的基本操作单元,一个Socket描述就是通信连接的一端,在一个网络通信连接中,两端通信程序应各有一个Socket对其进行描述,不同的进程通过各自的Socket发送和接收消息,从而实现了网络通信[2-3]。 Linux Socket支持以下3种常见的套接字类型:(1)流式Socket(SOCK_STREAM),一种最常用的套接字类型,可以保证数据传输的可靠性,不会出现数据丢失、破损或重复出现等差错;(2)数据报Socket(SOCK_DGRAM)是一种无连接和不可靠的双工数据传输服务,数据通过独立的报文进行传输,是无序的,并且不保证数据的可靠性和无重复性,适用于可靠性要求不高的一些场合;(3)原始Socket(SOCK_RAW),这种类型的Socket允许对底层协议(如IP或ICMP)直接访问,它功能强大但使用不太方便,一般用于新协议的开发。 Socket的编程方法很多,但主要有两种方式&&面向连接的TCP协议方式和无连接的UDP协议方式。本文采用的是TCP协议方式。2 通信平台的搭建 本文研究的是两个平台的通信,服务器是内有嵌入式Linux操作系统的ARM开发板,客户端是运行于Windows操作系统开发环境下的单片机。本文在实际研究中,服务器端选用ARM11系列的S3C6410为开发平台,内部嵌入Linux2.6.28内核版本,目标代码的编译平台选用装有Ubuntu12.04操作系统的普通PC,它们通过交叉编译和NFS挂载的方式实现了服务器端编译平台和运行平台的正常运行;客户端是在Windows XP系统开发环境下的带有各种传感器的51单片机。 为了实现二者之间的通信,WiFi模块在此过程中起到枢纽的作用,因此通信两端都有一个WiFi模块。在服务器端的WiFi模块选用的是Marvell 88w8686[4],它是一款低成本、低功耗、自带数据链路层的WiFi协议栈,内部集成了两个工作频率为128 MHz的ARM7 Core,一个Core负责网络数据的处理,另一个Core负责处理RF方面的工作。该模块通过SDIO接口与ARM开发板相连。 客户端的WiFi 模块选用海凌科电子有限公司新推出的HLK-RM04模块[5],是基于通用串行接口的符合网络标准的低成本嵌入式模块。通过该模块,传统的串口设备在不需要更改任何配置的情况下,即可通过Internet 网络传输自己的数据。模块通过双9针工头串口线与单片机相连,功能结构图如图1所示,由于该模块内置了TCP/IP协议栈,能够实现用户串口、以太网、无线网(WiFi)3个接口之间的转换。 至此,整个系统的通信平台的搭建已经完成,系统的整体结构功能框图如图2所示,从图中可以看出WiFi模块的组网模式。3 通信过程的实现 本文以采集到的温度值的传输来说明实现的过程。下面分别从服务器端和客户端进行介绍。3.1 服务器端的实现 虽然在举例中采用的是单一客户端与服务器进行通信,但考虑到实际中往往会遇到多个客户端连接服务器的情况,像常用的recv、send都是阻塞性函数,若资源没有准备好,则调用该函数的进程将进入睡眠状态,这样就无法处理I/O多路复用的情况。鉴于此,使用select函数既可以实现非阻塞I/O或信号驱动I/O,还可以设置等待时间。服务器端实现的程序流程图如图3所示。 接下来对其中一些关键性的步骤进行阐述。 (1)建立Socket socketfd=socket(AF_INET,SOCK_STREAM,0); AF_INET表示的是针对Internet的通信协议,允许在远程主机之间通信;SOCK_STREAM表明使用的是TCP协议,这样会提供按顺序的、可靠的、双向的、面向连接的比特流;0表示成功时返回文件描述符,失败时返回-1,这样通过errno即可知道出错的详细情况。 (2)绑定和监听 bind(socketfd,(structsocketaddr*)&server_sockaddr,sizeof(structsockaddr));//绑定端口号和地址 listen(socketfs,n);//监听,n表示允许与服务器的最大连接数 它们都是成功时返回0,出错时返回-1。 (3)调用select函数与客户端连接 fd_set readfd,//文件描述集的声明 FD_ZERO(&readfd);//清空readfd与所有文件句柄的联系 FD_SET(sockfd,&readfd);//建立文件句柄与readfd的联系 select(MAX_CONNECTED_NO,&readfd,NULL,NULL,(struct timeval*)0);//select函数的调用 FD_ISSET(sockfd,&readfd);//检查readfd联系的文件句柄sockfd是否可读写,当大于0时表示可读写3.2 客户端的实现 客户端的实现实际上分两部分进行:一是单片机通过DALLAS公司的DS18B20温度传感器将采集的数据传送给串口;二是与之用串口线相连的RM04模块,通过WiFi与服务器建立连接,具体实现的程序流程如图4所示。
还没注册?
现在免费注册,您即可:
?阅读所有技术文章及下载网站资料;
?定期获得业界最新资讯及设计实例;
?拥有个人空间参与网站及客户活动;
?撰写博客与业界朋友交流分享经验;
已经注册? 登录阅览全部精彩内容
型号/产品名
深圳市捷顺科技实业股份有限公司
深圳市捷顺科技实业股份有限公司
深圳市捷顺科技实业股份有限公司
深圳市捷顺科技实业股份有限公司
深圳市捷顺科技实业股份有限公司客户端程序:
package com.zx.
import android.app.A
import android.os.B
import android.util.L
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.EditT
import android.widget.TextV
import android.content.C
import android.widget.T
import java.io.BufferedR
import java.io.BufferedW
import java.io.InputStreamR
import java.io.OutputStreamW
import java.io.PrintW
import android.net.wifi.WifiM
import java.net.S
import com.zx.android.ClientA
public class ClientActivity extends Activity {
/** Called when the activity is first created. */
private Button startButton =
private Button stopButton =
private Button checkButton =
private WifiManager wifiManager =
private final String
DEBUG_TAG= "Activity01";
private TextView
mTextView=
private EditText
mEditText=
private Button
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton = (Button)findViewById(R.id.Button01);
mTextView=(TextView)findViewById(R.id.TextView01);
mEditText=(EditText)findViewById(R.id.EditText01);
startButton = (Button)findViewById(R.id.startWifi);
stopButton = (Button)findViewById(R.id.stopWifi);
checkButton = (Button)findViewById(R.id.checkWifi);
startButton.setOnClickListener(new StartWifiListener());
stopButton.setOnClickListener(new StopWifiListener());
checkButton.setOnClickListener(new CheckWifiListener());
mButton.setOnClickListener(new OnClickListener()
public void onClick(View v)
Socket socket =
String message = mEditText.getText().toString() + "/r/n";
//创建Socket
socket = new Socket("192.168.1.102",54321);
//向服务器端发送消息
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
out.println(message);
//接收来自服务器端的消息
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = br.readLine();
if ( msg != null )
mTextView.setText(msg);
mTextView.setText("数据错误!");
out.close();
br.close();
//关闭Socket
socket.close();
catch (Exception e)
// TODO: handle exception
Log.e(DEBUG_TAG, e.toString());
class StartWifiListener implements OnClickListener{
public void onClick(View v) {
wifiManager = (WifiManager)ClientActivity.this.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(true);
System.out.println("wifi state ---&" + wifiManager.getWifiState());
Toast.makeText(ClientActivity.this, "当前Wifi网卡状态为" +
wifiManager.getWifiState(), Toast.LENGTH_SHORT).show();
class StopWifiListener implements OnClickListener{
public void onClick(View arg0) {
wifiManager = (WifiManager)ClientActivity.this.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(false);
System.out.println("wifi state ---&" + wifiManager.getWifiState());
Toast.makeText(ClientActivity.this, "当前Wifi网卡状态为" +
wifiManager.getWifiState(), Toast.LENGTH_SHORT).show();
class CheckWifiListener implements OnClickListener{
public void onClick(View v) {
wifiManager = (WifiManager)ClientActivity.this.getSystemService(Context.WIFI_SERVICE);
System.out.println("wifi state ---&" + wifiManager.getWifiState());
Toast.makeText(ClientActivity.this, "当前Wifi网卡状态为" +
wifiManager.getWifiState(), Toast.LENGTH_SHORT).show();
&&& 这个是我在手机上运行时截的图,下面三个按钮是操作wifi网关的按钮,下面的那个提示框是按下这个按钮出现的,数字为0表示正在关闭wifi,数字2表示正在开启wifi,数字1表示wifi处于关闭状态,数字3表示 wifi处于开启状态。
&&&&& 上面的的发送按钮可以发送数据到服务器,实验室的是局域网,没有无线网络,我利用一个无线路由与电脑相连,在利用手机wifi搜索到该网络,手机与电脑构成局域网,便可发送数据。至于服务器端,可以采用网络调试助手接收数据,协议选择TCP服务器,ip地址和端口视自己情况定。
&&&&&& 当然也可以自己写个服务器端程序,再在命令行窗口中显示接收到的数据。
服务器端程序:
package com.zx.
import java.io.BufferedR
import java.io.BufferedW
import java.io.InputStreamR
import java.io.OutputStreamW
import java.io.PrintW
import java.net.ServerS
import java.net.S
public class Server implements Runnable
public void run()
//创建ServerSocket
ServerSocket serverSocket = new ServerSocket(54321);
while (true)
//接受客户端请求
Socket client = serverSocket.accept();
System.out.println("accept");
//接收客户端消息
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str = in.readLine();
System.out.println("read:" + str);
//向服务器发送消息
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(client.getOutputStream())),true);
out.println("server message");
out.close();
in.close();
catch (Exception e)
System.out.println(e.getMessage());
e.printStackTrace();
client.close();
System.out.println("close");
catch (Exception e)
System.out.println(e.getMessage());
//main函数,开启服务器
public static void main(String[] args)
Thread desktopServerThread = new Thread(new Server());
desktopServerThread.start();
阅读(...) 评论()socket通信,最全面的socket通信文章 - 电子工程世界网
socket通信
在电子工程世界为您找到如下关于“socket通信”的新闻
socket通信资料下载
Socket异步通信示程序代 - Socket异步通信......
7、Android远程登录含有loading登录效
通过使用Handler实现远程登陆功能以及效果,使用Socket以及DataOutputStream、DataInputStream 实现登陆判断,代码含注
册界面、服务器响应。
8、android在wifi下手机与电脑的socket通信
手机作为服务端,电脑使用MFC编程作为客户端,原理是,手机建立一个...
RS232串口与SOCKET通信转换程序,将串口消息和以太网SOCKET消息互相转换。...
主板培训主 板 培 训 资 料 第一节 主板及芯片组一、主板综述主板是电脑系统中最大的一块电路板,它的英文名字叫做“Mainboard”或“Motherboard”,简称M/B。主板上布满了各种电子元件、插槽、接口等。它为CPU、内存和各种功能(声、图、通信、网络、TV、SCSI等)卡提供安装插座(槽...
WebService
6.6 通过HTTP协议实现文件上传
第7章 Android中的Socket编程
7.1 TCP/IP协议与Socket通信
7.2 Socket通信的一般过程
7.3 Socket编程实战——Android聊天室实例
7.4 Android中通过Socket协议实现断点续传上传音/视频等大文件
第8章 Android中的浏览器编程...
等比较重要的协议。主要是介绍IP头,TCP头,UDP头的特点,以便从IP头中可以获取源地址,目的地址,协议类型等信息。在随后的章节中提出了Socket的概念,Socket实际上提供了一个通信端口使所有拥有Socket的端口的计算机之间能够相互通信,在本论文中主要说明了socket的建立,监听和撤销的过程。具体到程序实现中,对网卡混杂模式的设置是通过原始套接字(raw socket)来实现的。为了让...
3.4.2 守护进程的启动46
3.4.3 守护进程的错误输出..46
3.4.4 守护进程的建立.48
3.5 本章小结.....49
第四章 进程间通信...50
4.1 进程间通信的一些基本概念.50
4.2 信号....50
4.2.1 信号的处理52
4.2.2 信号与系统调用的关系.......54
4.2.3 信号的复位55...
4.1.9 关闭串行通信端口
4.1.10 SerialComm.cpp
4.2 WinSock通信应用程序
4.2.1 [柏克菜版]风格的socket函数
4.2.2 窗口专属延伸函数
4.2.3 本节范例程序
4.2.4 建立Winsock通信应用程序
4.2.5 建立Winsock服务器端应用程序
4.2.6 建立Winsock客户端应用程序
4.3 文件系统及登录信息...
一个外国人写的关于socket通信的文档,很基础包括的很全面,已经熟悉socket的看了对于一些细节也会有更深刻的体会...
linux socket通信客户端例程 实现与服务器的通信...
socket通信相关帖子
和媒介序之间转换。一方发送数据前要先将内存数据由主机字节序转换为传输介质层的字节序,再发送出去,接收方收到数据后,要转换为本地的主机字节序,再做后续处理。
比如TCP/IP协议的socket通信,基于socket通讯的双方一般选择Big-Endian为标准,又称网络字节序。socket定义了一组转换函数,用于多字节数在网络字节序和主机字节序之间的转换。htonl,htons用于主机序转换到网络序...
1.嵌入式C语言:C语言是嵌入式领域中最重要也是最主要的编程语言,通过大量编程实例重点来理解C语言的基础编程以及高级编程知识。2.根据用户使用手册学习搭建开发环境,编译和烧写系统3.Linux系统编程:主要是重点学习标准I/O库,Linux多任务编程中的多进程和多线程,以及进程间通信,同步与互斥对共享资源访问控制等重点知识,主要提升对Linux应用开发的理解和代码调试的能力。4.Linux应用...
socket通信
day31-03 网络函数讲解
day32_本地socket客户端与服务器的实现
day33_udp客户端与服务器的数据通信的实现
day34_tcp客户端与服务器的编写
day35-01 http服务器实现
day35-02 DRP组包、拆包
day36- udp服务器与客户端select模式实现
day37-01 udp服务器与多客户端与客户端与客户端聊天实现...
3、进程间通信基本概念
4、管道(PIPE)
5、信号(SIGNAL)
6、内存映射(MAPPED MEMORY)
7、消息队列(MESSAGE QUEUE)
8、信号量(SEMAPHORE)
9、共享内存(SHARE MEMORY)@
10、tcPip协议在应用程序中的编程开发(SOCKET套接字编程开发)
10.1. ISO/OSI七层协议模型与IP网络四层模式...
属于应用支持层(APL)。APS使用NWK所提供的数据进行传输服务。多路选择是APS的重要功能,提供上层应用程序使用网络数据传输服务的Endpoint(如同TCP/IP的socket)匹配网络地址,这样在两个通信端点间能让多个应用程序循环使用APSZDO则是整个Zigbee网络设备的控制中心,它使用NWK与APS提供的管理服务,并匹配Zigbeedeviceprofile(ZDP)规范,Zigbee...
ACK和FIN一般都会分开发送。
WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并被RFC7936所补充规范。机智云提供websocket api,浏览器(Javascript)可以通过Web Socket API与机智云云...
云平台吗?
度娘了一下,yeelink和乐为互联用得比较多啊
尤其是yeelink,大把树莓派在上面跑
可是这几天yeelink死活登不上,是不是要倒闭了?(貌似现在又能登上了)
直接用乐联网吧
找了半天,居然找不到有人把RPI撸上乐联网
我类个去,自己写吧
上python码
[Python] 纯文本查看 复制代码#!/usr/bin/python
import socket...
2.2.2 进程管理
2.2.3 内存管理
2.2.4 文件系统管理
2.2.5 设备管理
2.2.6 进程间通信机制
2.3 典型嵌入式Linux系统
2.3.1 uCLinux
2.3.2 RTLinnx
2.3.3 MontaVista Linux
2.3.4 RTAI
第3章 嵌入式系统的设计方法
3.1 嵌入式系统的总体结构
3.1.1 硬件层...
缺失是不是固件的问题?
十分感谢能解惑的各位!!
micropython gsm模块绑定socket的问题 micropython还不支持gprs,估计以后也不会支持,需要自己去写gprm模块的驱动,然后再用socket去通信。或者用ESP8266,利用wifi,成本比gprs低。 socket是用你的gprs模块来实现的,pyb只要负责把对应的AT指令通过串口发给模块就可以了...
socket通信
day31-03 网络函数讲解
day32_本地socket客户端与服务器的实现
day33_udp客户端与服务器的数据通信的实现
day34_tcp客户端与服务器的编写
day35-01 http服务器实现
day35-02 DRP组包、拆包
day36- udp服务器与客户端select模式实现
day37-01 udp服务器与多客户端与客户端与客户端聊天实现...
socket通信视频
你可能感兴趣的标签
热门资源推荐android在wifi下手机与电脑的socket通信
资料价格:免费
文件类型: (rar)[]
文件大小:5.7 MB
上传时间:
标&&&&&&&签: & &
论文写作技巧
android在wifi下手机与电脑的socket通信android代码 源代码,值得你拥有
您可能需要的
[] [] [] [] [] [] [] []如何运用socket网络编程实现上位机和下位机之间通过wifi进行通信? - 知乎53被浏览5412分享邀请回答84 条评论分享收藏感谢收起310 条评论分享收藏感谢收起

我要回帖

更多关于 手机外置wifi接收模块 的文章

 

随机推荐