tag 标签: socket

相关帖子
相关博文
  • 2024-9-25 13:10
    72 次阅读|
    0 个评论
    一、物联网行业中存在的问题 在产品的研发阶段,针对 NB 产品的 Socket 通信展开了全方位且细致入微的测试工作。测试期间,严格遵循预先制定的详尽测试计划和严谨流程,对通信的稳定性、数据传输的准确性和及时性、以及在不同网络环境下的适应性等多个关键方面,进行了逐一细致的验证。只有通过这样严格的检测,才能有力保障产品在正式投入市场后,能够充分满足用户对于通信质量的高标准、高要求。 二、该问题带来的危害及影响 Socket是应用层与TCP/IP协议族通信的中间软件抽象层。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。市面上的NB通信模组通常把这些功能API封装成几条AT指令,这样对于研发人员更方便开发; 对于用开源平台开发的客户,通过用发送AT指令的形式进行soket通信测试,更容易理解大江平台的Soket组件网络编程的开发逻辑,用开源通信模组,用OPEN形式做开发更容易上手。 大江版服务层组件-soket组件 SOCKET AZ-DJ-E-SKT-08-001 AM21EV5 AT指令手册 AM21EV5(NB+GPS模组) AM21EV6(NB模组) 三、解决方法 1、原理介绍 搭建下图NB设备soket通信测试环境,奇迹开源产品——大江平台开源开发板通过串口转USB转线接测试电脑USB口,电脑串口调试助手向开发板模组发送相关AT指令,连实现NB设备与服务器通信测试。 2、方案详情 2.1按上图搭建测试环境 2.2服务器上打开网络调试助手,设置好端口号 2.3串口助手配置115200波特率,选择串口号,向AM430EV5串口发送AT指令,连接服务 以 TCP 为例: 第 1 步:设备上电,自动获取SIM卡状态,获取基站时间信息 +POWERON:0 ^SIMST:1 +CGEV:ME PDN ACT 0 +CTZEU:+32,0,2024/08/28,03:11:39 第 2 步:建立 socket 连接 AT+NSOCR=STREAM,6,8867,1//STREAM 和6协议,最后一个 参数可选,默认为1,含义是启动数据接收线程与否 +NSOCR:0 第 3步:连接TCPconnect AT+NSOCO=0,101.200.35.208,8867 // 设置链路号,IP地址,端口号 OK 第 3 步:发送数据 AT+NSOSD=0,2,4444,0x200,1发送2个字节,HEX编码0x44 0x44(DD) 0,2 OK +NSOSTR:0,1,1//服务器返回字符串 第 4步:发送数据 AT+XSSEND=0,6,"123456" //返回的链路号,数据长度,双引号为数据内容字符串 OK AT+XSSEND=0,6,3AC2884E0D0A // 返回的链路号,数据长度, 数据内容HEX OK 第 5 步:接收数据 +NSONMI:0,4 //模组收到4个字符 +NSORF:0,101.200.35.208,8867,4,31323334,4 OK +NSONMI:0,4 第 6 步:关闭 socket 连接 AT+XSCLOSE=0 //关闭TCP连接 +XSSTATE:0,0 3、需要的测试设备或测试环境 5V直流电源 AM21EV5开发板 串口转USB数据 NB天线 串口调试助手 服务器及网络调试助手 (如有侵权,联系删除)
  • 热度 21
    2022-1-7 14:18
    1765 次阅读|
    0 个评论
    Android之Socket实例
    Socket(套接字)是对 TCP/IP 协议的封装和应用,根据底层封装协议的不同, Socket 的类型可以分为流套接字( streamsocket )和数据报套接字( datagramsocket )两种。流套接字将TCP作为端对端协议,提供了一个可信赖的字节流服务;数据报套接字使用 UDP 协议,提供数据打包发送服务,应用程序可以通过它发送最长 64KB 的信息。Socket 的通信模型图如1-1所示。 图1-1 Socket 的通信模型图 通过图1-1可以很容易地看出,使用Socket进行两个应用程序之间的通信时可以选择使用TCP还是UDP作为其底层协议。对比两种方式,就会发现它们各有优劣,TCP 首先连接接收方,然后发送数据,保证成功率,速度相对较慢(相比 HTTP 方式还是非常快的);UDP 把数据打包成数据包,然后直接发送对应的IP 地址,速度快,但是不保证成功率,并且数据大小有限。 一个功能齐全的 Socket,都要包含以下基本结构,其工作过程包含4个基本的步骤∶创建Socket,打开连接到 Socket 的输入/出流,按照一定的协议对 Socket进行读/写操作,关闭 Socket。 Java在java.net包中提供了 Socket 和 ServerSocket 两个类,分别用来表示双向连接的客户端和服务端,是Socket编程的核心类。构造方法很多,一般情况下使用下面两种∶ Socket client = new Socket("127.0.0.1 ",999); ServerSocket server = new ServerSocket(999); 其中,Socket 类用于实例化一个 Client,参数分别是要访问的IP 地址和端口号,这个端口号要与服务端一致。ServerSocket类用于实例化一个 Server,其中的参数用来设置端口这里的端口不能与"3306""80""8080"等常用端口号冲突。 下面以基于TCP的Socket为例来讲解如何使用Socket。 使用Java Socket创建一个服务端程序,运行在eclipse平台,并运行在PC上,然后在手机上编写客户端程序,在局域网内访问服务端。下面先编写服务端,代码如下: package socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class sockettest { public static void main(String 这里的代码很简单,单纯地使用ServerSocket建立服务,设置端口号为2226,然后每当有客户端访问时就返回一个“hello this is www.bigbirdic.com! ”。编辑完成服务端之后,我们在Android Studio中创建一个用于创建Socket客户端的类,代码如下: package com.rfstar.sockettest; import android.util.Log; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketException; public class SocketUtil { private String str; private Socket socket; private String ip; public SocketUtil(String str,String ip){ this.str=str; this.ip=ip; } public String sendMessage(){ String result=""; try{ socket=new Socket(); //ip为电脑所在的局域网网址 socket.connect(new InetSocketAddress(ip,2226),5000); OutputStream outputStream=socket.getOutputStream(); outputStream.write(str.getBytes()); outputStream.flush(); BufferedReader bfr=new BufferedReader(new InputStreamReader(socket.getInputStream())); String line=null; StringBuffer buffer=new StringBuffer(); while ((line=bfr.readLine())!=null) { buffer.append(line); } result=buffer.toString(); bfr.close(); outputStream.close(); socket.close(); }catch (SocketException e) { //连接超时,在UI界面显示消息 Log.i("socket",e.toString()); }catch (IOException e) { e.printStackTrace(); } return result; } } 在本类中,使用Socket连接服务器端,然后发送相关信息并接收服务端数据。代码并不难,下面就在MainActivity中使用此类。当然,使用它之前要先修改MainActivity的布局文件activity_main.xml,代码如下:
  • 热度 31
    2014-11-19 11:29
    3781 次阅读|
    0 个评论
    文章来源:http://www.embed-net.com/thread-55-1-1.html (此论坛为一个WIZnet用户开设的,论坛积累了大量的W5500相关应用及例程,具有很大的参考价值。) 官方提供了W5500的最新驱动库,下载地址如下: http://wizwiki.net/wiki/doku.php?id=products:w5500:driver 下面简单介绍下如何使用这套库 首先下载库源码,文件目录如下所示: 我们主要用到Ethernet文件夹下面的文件,将这些文件加入到自己的工程中,然后编译,若编译出现类似于如下错误 ..\User\Ethernet\wizchip_conf.c(113): error:  #29: expected an expression .id                  = _WIZCHIP_ID_, ..\User\Ethernet\wizchip_conf.c(114): error:  #29: expected an expression .if_mode             = _WIZCHIP_IO_MODE_, ..\User\Ethernet\wizchip_conf.c(115): error:  #29: expected an expression .CRIS._enter         = wizchip_cris_enter, ..\User\Ethernet\wizchip_conf.c(116): error:  #29: expected an expression .CRIS._exit          = wizchip_cris_exit, ..\User\Ethernet\wizchip_conf.c(117): error:  #29: expected an expression .CS._select          = wizchip_cs_select, ..\User\Ethernet\wizchip_conf.c(118): error:  #29: expected an expression .CS._deselect        = wizchip_cs_deselect, ..\User\Ethernet\wizchip_conf.c(119): error:  #29: expected an expression .IF.BUS._read_byte   = wizchip_bus_readbyte, ..\User\Ethernet\wizchip_conf.c(120): error:  #29: expected an expression .IF.BUS._write_byte  = wizchip_bus_writebyte ..\User\Ethernet\wizchip_conf.c(123): warning:  #12-D: parsing restarts here after previous syntax error }; ..\User\Ethernet\wizchip_conf.c: 1 warning, 8 errors 则需要根据自己的编译器做下设置,keil MDK设置如下所示: 主要原因是Keil MDK默认设置不支持按照结构体名称初始化结构体的原因导致。 W5500和MCU是通过SPI接口通信的,库是利用如下结构体中的相关函数指针实现SPI通信和其他功能。 _WIZCHIP WIZCHIP = { .id = _WIZCHIP_ID_, .if_mode = _WIZCHIP_IO_MODE_, .CRIS._enter = wizchip_cris_enter, .CRIS._exit = wizchip_cris_exit, .CS._select = wizchip_cs_select, .CS._deselect = wizchip_cs_deselect, .IF.BUS._read_byte = wizchip_bus_readbyte, .IF.BUS._write_byte = wizchip_bus_writebyte // .IF.SPI._read_byte = wizchip_spi_readbyte, // .IF.SPI._write_byte = wizchip_spi_writebyte }; 根据函数名字和库中的注释,我们这里也对要实现的函数做个简单的说明 wizchip_cris_enter :进入临界区的函数,可以不管 wizchip_cris_exit :退出临界区的函数,也可以不管 wizchip_cs_select :输出有效片选信号的函数,也就是控制CS输出低电平的函数,必须实现 wizchip_cs_deselect :控制CS输出高电平的函数,必须实现 wizchip_bus_readbyte :SPI总线读取一字节数据函数,必须实现 wizchip_bus_writebyte :SPI总线写一字节数据函数,必须实现 根据以上可知,只要实现了SPI的基本操作,移植基本完成,是不是很简单 下面我们就新建一个spi.c的文件来实现这几个函数,当然这些函数名字可以不和这个结构体里面的函数名字一样,到时候可以调用相关的函数注册下即可 /**    ******************************************************************************    * @file    spi.c    * $Author: 飞鸿踏雪 $    * $Revision: 17 $    * $Date:: 2014-10-25 11:16:48 +0800 #$    * @brief   SPI驱动函数实现.    ******************************************************************************    * @attention    *    *h3center© Copyright 2009-2012, EmbedNet/center    *center http://www.embed-net.com /center    *centerAll Rights Reserved/center/h3    *    ********************************************************   继续阅读:http://www.iwiznet.cn/blog/?p=6630
  • 热度 22
    2014-11-7 17:07
    1320 次阅读|
    0 个评论
    W5500中断部分,W5500中文手册V1.0 写的不够清楚,该文是本人结合中英文手册及自己理解,整理出有关中断部分的理解,如有不正确的请指正。 一:引脚 INTn 为中断输出(Interrupt output) 低电平:W5500的中断生效; 高电平:无中断或者处于中断生效等待中 二:中断相关寄存器 2.1  IR (连接中断寄存器)   该寄存器主要指示网络连接错误或唤醒引起当的中断。 某位为1 且 该位中断没有被屏蔽就可以引发中断,INTn引脚将会被拉低,中断处理完毕后,可以由主机写为‘1’清除该位中断. IR 为‘0×00’时,INTn引脚将会被拉高。  2.2  IMR (连接中断屏蔽寄存器) 中断屏蔽寄存器(IMR)是用来屏蔽中IR中断的,某位写‘1’,则开启中断;写‘0’,关闭中断。 每个中断屏蔽位对应中断寄存器(IR)中的一个位. 如果IMR某位写0,即使IR中对应位为1了,也不会引发中断,INTn引脚不会被拉低。 2.3 SIR ( Socket 中断寄存器)   SIR就是指示哪个Socket发生的中断的。 如果某个Socket发生的中断,该寄存器的对应位将被置为1 ,直到被主机置‘1’清除。如果Sn_IR不等于‘0×00’, 就会引发中断,INTn引脚将被拉低。 2.4  SIMR (Socket 中断屏蔽寄存器) SIMR寄存器来屏蔽中SIR中断的,某位写‘1’,则开启中断;写‘0’,关闭中断。 每个中断屏蔽位对应中断寄存器(SIR)中的一个位. 如果SIMR某位写0,即使IR中对应位为‘1’了,也不会引发中断,INTn引脚不会被拉低。 2.5 Sn_IR (Socket n 中断寄存器) Sn_IR 寄存器用于提供给Socket n 中断类型信息,如建立(Establishment)、终止(Termination)、接收数据(Receiving data)和超时(Timeout)。当触发一个中断即Sn_IMR的对应位是’1′的时候,Sn_IR的对应位也将会变成‘1’。 如果想把Sn_IR位清零的话,主机应该将该位置‘1’ 这里的 ,而不是 表示不能由主机写‘1’让W5500产生中断,只能由主机设置‘1’ ,清除某一位中断。 2.6 Sn_IMR (Socket n 中断屏蔽寄存器) Sn_IMR 负责屏蔽Socket n的中断。某位写‘1’,则开启中断;写‘0’,屏闭中断。 每一位都对应了Sn_IR寄存器的相应位。Socket n的中断触发并且Sn_IMR的对应位为‘1’时,Sn_IR的对应位变为‘1’。如果Sn_IMR和Sn_IR的对应位均为‘1’且SIR 寄存器的相应为‘1’,INTn 引脚便会拉低并使主机产生中断。  2.7  INTLEVEL (低电平中断定时器寄存器) 该寄存器用于设置中断生效等待的时间(IAWT)。当下一个中断触发,中断引脚将会在INTLEVEL时间后,拉低中断引脚(INTn)。  假设某一时段 先后发生2个中断 ,Socket 0 和scoket1 A.  当Socket 0的超时中断被触发, SIR S0_IR 设置为‘1’,指出是第0个Socket发生了超时中断。接着 INTn 引脚才被拉低,告知主机发生了中断。B.  当Socket 1的连接中断在前一个中断未处理完成之前被触发,则INTn 引脚仍然为低,S1_IR SIR 位设置为‘1’。C.  如果主机处理完中断,然后清理S0_IR 位及SIR ,虽然此时S1_IR SIR 仍然保持为‘1’,INTn引脚仍将被拉高。D.  即使S1_IR   SIR 位被设置为‘1’,但是在 INTLEVEL 期间,INTn不能被拉低。只有过了INTLEVEL时间,INTn才能被拉低。 三:中断方式设计程序 通过以上介绍,可知几个寄存器之间有如下关系: A:3个中断寄存器 IR,SIR ,Sn_IR,它们对应的3个中断屏蔽寄存器IMR,SIMR,Sn_IMR(也可以认为是中断使能寄存器)。只有使能对应位中断,该位为‘1’时才能引发中断,拉低INTn。B:一次中断处理结束,清除对应状态位后,都会拉高INTn,如果还有别的中断状态寄存器为‘1’,就等待一定时间再拉低INTn。这个时间是由INTLEVEL寄存器来设定的。对于主机来说来一次中断,只能处理一个事件。C :IR寄存器与网络连接状态有关的寄存器,跟SIR,Sn_IR 没有直接关系。而SIR 和Sn_IR 是同时出现的,SIR 指出是第n个Socket 发生了中断事件,Sn_IR指出了Socket n 发生了什么类型中断事件,如收到数据 超时等。 因此如果主机采用中断方式,检测到INTn才能被拉低了,进入中断服务函数可以采用先判断是不是IR中断,不是再读取SIR状态,找到触发中断的那个Socket n,接着读取对应的Sn_IR 进行处理。每次处理完,需要主机相应寄存器的相应位清除。                         By William
  • 热度 27
    2013-2-28 19:31
    1338 次阅读|
    1 个评论
      网络字节序与主机字节序 主机字节序就是我们平常说的大端和小端模式:不同的CPU有不同的字节序类型,这些字节序是指整数在内存中保存的顺序,这个叫做主机序。引用标准的Big-Endian和Little-Endian的定义如下:   a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。   b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。 网络字节序:4个字节的32 bit值以下面的次序传输:首先是0~7bit,其次8~15bit,然后16~23bit,最后是24~31bit。这种传输次序称作大端字节序。由于TCP/IP首部中所有的二进制整数在网络中传输时都要求以这种次序,因此它又称作网络字节序。字节序,顾名思义字节的顺序,就是大于一个字节类型的数据在内存中的存放顺序,一个字节的数据没有顺序的问题了。所以:在将一个地址绑定到socket的时候,请先将主机字节序转换成为网络字节序,而不要假定主机字节序跟网络字节序一样使用的是Big-Endian。由于这个问题曾引发过血案!公司项目代码中由于存在这个问题,导致了很多莫名其妙的问题,所以请谨记对主机字节序不要做任何假定,务必将其转化为网络字节序再赋给socket。   关于TCP/IP中的ip地址,协议和端口: 网络层的ip地址用来唯一标识网络中的主机; 传输层的协议+端口用来唯一标识主机中的进程。   socket起源于Unix。 关于socket的服务端与客户端 服务端要有固定的地址才能使任意客户端与服务端建立连接; 而客户端是主动去建立连接,所以客户端不必有固定的地址+端口。   故服务器端通过bind函数确定固定的地址+端口; 而客户端通过connect函数随机确定将要建立连接的端口。 三次握手是在connect函数和accept函数中完成的。   客户端: socket connect read   服务端: socket bind listen accept read 图1 图2   注:本文参考了一篇博客,但是原文连接当时没有保存,找不到了。如果找到再补上,向原作者致歉。
相关资源
  • 所需E币: 1
    时间: 2023-7-11 17:29
    大小: 103.4KB
    上传者: 张红川
    socket编程常用API汇总.pdf
  • 所需E币: 4
    时间: 2022-10-7 22:42
    大小: 1.68MB
    上传者: ZHUANG
    WebSocket在远程视频监控中的应用探析
  • 所需E币: 5
    时间: 2022-10-6 11:00
    大小: 1.79MB
    上传者: ZHUANG
    基于OpenCV与Socket的网络视频监控系统设计与实现
  • 所需E币: 2
    时间: 2022-6-16 10:16
    大小: 219.12KB
    上传者: czd886
    基于DataSocket技术的汽车传感器网络化测试系统设计
  • 所需E币: 2
    时间: 2021-6-11 10:26
    大小: 187.06KB
    上传者: 若虚
    C++网络编程,Socket详细介绍
  • 所需E币: 0
    时间: 2021-3-24 17:56
    大小: 59.06KB
    上传者: samewell
    C#中Socket进行UDP通信本篇文章主要介绍了C#的Socket实现UDP协议通信示例代码,
  • 所需E币: 0
    时间: 2021-3-17 17:05
    大小: 59.06KB
    上传者: bwj312
    C#中Socket进行UDP通信.zip
  • 所需E币: 0
    时间: 2020-12-18 23:05
    大小: 22.15KB
    上传者: samewell
    如何使用socket进行双机通讯
  • 所需E币: 0
    时间: 2020-11-16 15:34
    大小: 25.72KB
    上传者: wxlai1998
    如何使用socket进行双机通讯
  • 所需E币: 4
    时间: 2020-11-16 13:26
    大小: 3.26MB
    上传者: wxlai1998
    如何使用Socket实现网络聊天系统的设计与实现[摘要]随着Internet的飞速发展,网络聊天以其操作简单、方便快捷、私密性好等优点已经迅速发展成为最普遍的网络交流方式之一,越来越受到人们的青睐,丰富了人们的网上生活。开发并实现具有自身特色的网络聊天系统具有实际应用价值。  本网络聊天系统基于Java应用程序设计,以C
  • 所需E币: 2
    时间: 2020-11-10 00:28
    大小: 92.63KB
    上传者: LGWU1995
    C#中Socket进行UDP通信
  • 所需E币: 3
    时间: 2019-12-26 10:29
    大小: 1.58MB
    上传者: wsu_w_hotmail.com
    Que-LinuxSocketProgrammingByExample-fly……
  • 所需E币: 3
    时间: 2019-12-26 01:20
    大小: 66.91KB
    上传者: 978461154_qq
    实战linuxsocket编程--示例源码……
  • 所需E币: 5
    时间: 2019-12-25 16:30
    大小: 5.33MB
    上传者: rdg1993
    LinuxC函数详解……
  • 所需E币: 5
    时间: 2019-12-25 11:28
    大小: 612.67KB
    上传者: quw431979_163.com
    首先介绍了控制系统的结构然后分析了通信系统的流程最后用仿真结果证明了系统的可行性和有效性.##5测控技术6年第卷第期文章编号在工业以太网中的应用研究∏∞上海交通大学自动化研究所上海张广辉邵惠鹤摘要交换技术和全双工技术在以太网中的应用使得交换式以太网中继式集线器工作在≥模型的物工业以太网的通信实时性和确定性大大提高底层智理层是冲突域的一部分而交换式集线器或者交换能节点是基于的嵌入式系统它具有实时机工作在≥模型的数据链路层它根据内部的≤性好和可靠性高等优点基于交换式以太网的嵌入式地址表实现数据链路层点对点的通信从而使以太网测控系统将两者进行了有机的……
  • 所需E币: 4
    时间: 2019-12-25 11:26
    大小: 1.24MB
    上传者: rdg1993
    基于rabbit2000的socket网络编程美国Rabbit超级8位单片机超越最高性价比,诚征各地总代理Rabbit2000/3000微处理器(www.rabbitsemiconductor.com)无电磁干扰,6串口(带IrDA),56个数字I/O,积分编码器,脉宽调制输出,脉冲捕获以及测量能力,带后备电池的实时钟,集成接口,超低电源模式。紧凑指令集与高时钟速度大大提高了浮点、逻辑和I/O的速度。强劲的DnynamicC开发语言,免费提供带源代码的TCP/IP协议库。支持包括PPP,SOCKT,TCP和UDP,FTP,TFTP,HTTP(w/SSI和CGI),DHCP,SMT,PING,以及POP3,Modbus,uC/OS-2,SSL…集成的“从端口”极易成为其它微处理器的智能外设。软件可控时钟速度允许了功耗和速度的权衡。另有数十款核心模块帮助您快速开发RCM2200廉价的嵌入式设备以太网解决方……
  • 所需E币: 3
    时间: 2020-1-10 09:59
    大小: 464.7KB
    上传者: wsu_w_hotmail.com
    05--MTK_SOCKET接口MediaTekSocket(SOC)MessageSequenceChart(MSC)SpecificationDocumentNumber:Preliminary(Released)InformationRevision:0.00ReleaseDate:Sep.22,2004SOCPreliminaryInformationMessageSequenceChartSpecificationLegalDisclaimerBYOPENINGORUSINGTHISFILE,BUYERHEREBYUNEQUIVOCALLYACKNOWLEDGESANDAGREESTHATTHESOFTWARE/FIRMWAREANDITSDOCUMENTATIONS(“MEDIATEKSOFTWARE”)RECEIVEDFROMMEDIATEKAND/ORITSREPRESENTATIVESAREPROVIDEDTOBUYERONAN“AS-IS”BASISONLY.MEDIATEKEXPRESSLYDISCLAIMSANYANDALLWARRANTIES,EXPRESSORIMPLIED,INCLUDINGBUTNOTLIMITEDTOTHEIMPLIEDWARRANTIESOFMERCHANTABILITY,FITNESSFORAPARTICULARPURPOSEORNONINFRINGEMENT.NEITHERDOESMEDIATEKPROVIDEANYWARRANTYWHATSOEVERWITHRESPECTTOTHESOFTWAREOFANYTHIRDPA……