精华内容
下载资源
问答
  • 在右下角的任务栏里,本地连接的状态中,显示接收和发送的数据都是天文数字,用杀毒软件查过了,有木马都杀了,但是还是这样,网速会受一点影响,不过看这个数据量也太恐怖了,而且只要连接就会这样。  哪位...
    在右下角的任务栏里,本地连接的状态中,显示接收和发送的数据都是天文数字,用杀毒软件查过了,有木马都杀了,但是还是这样,网速会受到一点影响,不过看这个数据量也太恐怖了,而且只要连接就会这样。 

    哪位高手知道怎么能查到原因吗?我已经重新格式了C盘,安装了系统,但是一连接又是这样。 
    从任务管理器中看不出进程有什么异样,注册表选项看不太明白,但是没有发现异常
    展开全文
  • 最近在项目开发中,需要用到一台android设备去控制另一台android设备的显示。 第一次尝试的做法是使用组播的方式,由一台主控设备...所以这样的做法导致,虽然数据包发过去了,但是不能每次都成功接收但是项目必

    最近在项目开发中,需要用到一台android设备去控制另一台android设备的显示。

    第一次尝试的做法是使用组播的方式,由一台主控设备发消息给受控设备。

    但是,由于组播发送消息的模式是发送一个数据包,也就是udp。

    了解过一点网络方面知识的人都知道,udp传输是不可靠的,数据包发过去了,接不接收得到是不管的,

    所以这样的做法导致,虽然数据包发过去了,但是不能每次都能成功接收到。但是项目必须是每次发都能接收到数据的,所以不采用组播的方式。

    最后选择使用TCP连接的方式来做,这种方式就是可靠的。

    具体的udp,tcp的知识,有需要了解的就在网上查找吧,这里就不做解释了。


    一、首先先上图

    1、控制端,无连接状态


    打开控制端的界面是这样显示的,因为只是个例子,所以请自动忽略美观吧。大笑


    2、再来张无连接状态的受控端图


    但是这个无连接状态是在没有打开控制端的时候才这样显示的,当控制端先打开的时候,受控端界面是这样的


    然后控制端界面立即显示


    当看到两端的界面如上图所示,则代表两端已经连接,这时候就可以开始操作发送数据了。


    二、接下来就让控制端发个消息给受控端

         其实发消息很简单,只需要点击一下控制端界面中的  “发送数据给客户端” 即可,

         然后受控端就能接收到消息

        

    这样受控端就成功收到消息了,这时候受控端可以根据收到的数据进行显示了,

    例子就是这么简单粗暴。


    三、好像还缺少了点什么?

      看到这里应该会发出    “我勒个去,没代码说个毛线啊!!!”。


      第一次写文章,先包涵着看嘛。

      代码来了:

    1、控制端

    首先,tcp连接是需要设备的ip的,所以先贴出查设备ip的代码先

    /***
         * 使用WIFI时,获取本机IP地址
         *
         * @param mContext
         * @return
         */
        private static String getWIFILocalIpAddress(Context mContext) {
    
            //获取wifi服务
            WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
            //判断wifi是否开启
            if (!wifiManager.isWifiEnabled()) {
                wifiManager.setWifiEnabled(true);
            }
            WifiInfo wifiInfo = wifiManager.getConnectionInfo();
            int ipAddress = wifiInfo.getIpAddress();
            String ip = formatIpAddress(ipAddress);
            return ip;
        }
    
        private static String formatIpAddress(int ipAdress) {
    
            return (ipAdress & 0xFF) + "." +
                    ((ipAdress >> 8) & 0xFF) + "." +
                    ((ipAdress >> 16) & 0xFF) + "." +
                    (ipAdress >> 24 & 0xFF);
        }

    这代码也是网上看到的,具体在哪篇文章看到的忘记了,如果作者看到这篇文章后需要我写明出处的,请联系我,我好贴出来,包涵啊。

    当然,读取ip是需要手机权限的,我就把这个小项目需要用到的权限先贴出来了,也不多,就几个

        <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
        <uses-permission android:name="android.permission.WAKE_LOCK"/>
        <uses-permission android:name="android.permission.INTERNET"/>
    好了,先获取到ip,接下来有用。


    那么监听tcp的连接请求:

    try {
                Boolean endFlag = false;
                ServerSocket ss = new ServerSocket(8800);
                while (!endFlag) {
                    // 等待客户端连接
                    Socket s = ss.accept();
                    addIPToList(s);
                    //读取客户端发来的消息
                    BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
                    String message = input.readLine();
                    Log.e("来自客户端的消息 : ", message);
                    //向客户端发送消息
                    //注意第二个参数据为true将会自动flush,否则需要需要手动操作output.flush()
                    mOutput = new PrintWriter(s.getOutputStream(), true);
                    mOutput.println("已连接到服务器!!!");
                }
                ss.close();
    
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    当然,记得这段代码需要放在子线程中运行。


    发送消息:

    if (ips != null && ips.size() > 0) {
                for (int i = 0; i < ips.size(); i++) {
                    try {
                        Socket next = ips.get(i);
                        PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(next.getOutputStream(),"UTF-8")),true);
                        out.println(s);
                        out.flush();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
    
            }
    到这里,你可能发现了一个 ips 的变量了吧,这个是一个存放受控端Socket的集合,Socket就是从连接请求代码中的  addIPToList(s)  方法中添加进去的,

    既然是个集合,你应该想到这也可以发送给多个受控端吧,也就是可以控制多个设备的意思了。


    2、受控端

    请求连接的代码:

    new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        mS = new Socket(ip, 8800);
                        // outgoing stream redirect to socket
                        OutputStream out = mS.getOutputStream();
                        // 注意第二个参数据为true将会自动flush,否则需要需要手动操作out.flush()
                        mOutput = new PrintWriter(out, true);
                        mOutput.println("Hello IdeasAndroid!");
                        mInput = new BufferedReader(new InputStreamReader(mS
                                .getInputStream(),"UTF-8"));
    
                        String mMessage;
                        while (true) {
                            try {
                                if ((mMessage = mInput.readLine()) != null) {
                                    String decode = URLDecoder.decode(mMessage, "UTF-8");
                                    //这里加“-”是为了避免得到的字符串前面有多了奇怪的字符,测试中有遇到过,加“-”完再截取让得到的字符串准确
                                    if (decode.contains("{") && decode.contains("}")){
                                        decode = "-"+decode+"-";
                                        int i = decode.indexOf("{");
                                        int j = decode.lastIndexOf("}");
                                        decode = decode.substring(i, j+1);
                                    }
    
                                    Message message1 = Message.obtain();
                                    message1.obj = decode;
                                    mHandler.sendMessage(message1);
                                }
    
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
    
                    } catch (UnknownHostException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
    看到上面的ip变量了吧,这个就是上面说需要用到的控制端ip了。

    中间那段对字符串的判断,由于发送的是java对象的json字符串,如果不是json字符串,也同样可以收到。


    显示收到的信息:

    private Handler mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                Log.e("接收到字符串  === ", (String) msg.obj);
                String beanString = (String) msg.obj;
                if (beanString.contains("{")){
                    mGson = new Gson();
                    Bean bean = mGson.fromJson(beanString, Bean.class);
                    mTvShow.setText("名字 = "+bean.getName()+"\n"+"时间 : "+bean.getTime());
                }else {
                    mTvShow.setText(beanString);
                }
    
            }
        };



    好了,基本上关键代码都贴出来了。

    因为是第一次写,写的不好。好想很多都将详细,但是好像那样太啰嗦了点。
















    展开全文
  • Apple文档告诉我们有关SCNetworkReachability API的一些信息:“请注意,可达性并不能保证主机将实际接收到数据包。” 我们已经知道的所谓的“可达性”只能告诉我们本地连接状态。目前已知的这些工具都由...
  • 一个无线网卡能够看到和检测到一个接入点的信号,但是,却得不到那个接入点分配的IP地址。你遇到过这样的问题吗?  无线协商之后出现DHCP(动态主机控制协议)失败的现象是很常见的。无线协商建立起了数据链路。一旦...
  • 如果网络永远卡,那 KCP/TCP 表现类似,但是网络本身就是可靠的,丢包和抖动无法避免(否则还要各种可靠协议干嘛)。在内网这种几乎理想的环境里直接比较,大家都差不多,但是公网上,放3G/4G网络情况下,...
  • 在内网里直接比较,大家都差不多,但是公网上,放3G/4G网络情况下,或者使用内网丢包模拟,差距就很明显了。公网在高峰期有平均接近10%的丢包,wifi/3g/4g下更糟糕,这正是造成各种网络卡顿的元凶。 ...
  • 如果没有浏览器就会提示找不到服务器地址。 <h3>DNS 优化 <p>DNS 查询的过程经历了很多的步骤,如果每次都如此,是不是会耗费太多的时间,资源。所以我们应该尽早的返回真实的 IP 地址,...
  • TCP/TLS/UDP 有什么区别?

    千次阅读 2012-08-28 13:16:58
    UDP是无连接的,数据包发出去就不管了,没有数据包是否成功并且正确发送的检查,不能保证数据传输100%正确,但是开销会比较小。 TLS是在更上一层的协议,他必须建立在可靠的数据传输基础上,所以一般是在TCP之上,...
    TCP和UDP都是网络层上的协议,是建立在IP层之上的。
    TCP是有连接的传输,它通过对它下层IP包的冲突、错误检测和重传,保证了最终接收到的数据是可靠的;UDP是无连接的,数据包发出去就不管了,没有数据包是否成功并且正确发送的检查,不能保证数据传输100%正确,但是开销会比较小。
    
    TLS是在更上一层的协议,他必须建立在可靠的数据传输基础上,所以一般是在TCP之上,当然也可以建立在SCTP之上,但是一定不是UDP之上。TLS全名叫传输层安全(Transpot Layer Security)协议,TLS连接的建立有个标准的握手过程,可以查看RFC2246了解具体的细节。简单的讲,就是通信双方互相验证对方的数字证书,确认对方的身份,并通过密钥交换协议,确定出相互通信时使用的加密算法和密钥,之后的数据通信都使用协商好的加密算法进行加密传输。
    它可以保证:1. 与自己通信的一方确实是他自己声明的身份(通过证书检查确认)。 2. 通信时的数据传输的安全的(因为加密过了,中间即使被窃听,也没法解密,没法知道具体的内容)。
    展开全文
  • 岳维功 ortp-realease.pdf

    2020-12-24 04:00:17
    事件添加包中,如何发送数据,以及接收对应数据包后该如 何处理。关于 的构成如下图所示: db bas db lim eeN b pi db ref b next telephone b cont event b datap event b rptr volume Ihrtplvent rype b wptI ...
  • NatTypeTester.rar

    2020-08-13 18:46:26
    在全锥型网络下,后续当Server1要发送数据Client时,Server1首先将数据送NAT(210.21.12.140:8000),NAT接收该报文,会将该报文转发给Client(192.168.1.5:5000)。 在全锥型网络下,Server2要发送数据给...
  • 64位的,但是在Ubuntu系统中怎么折腾也不能联网,照着网上各种说法配置都不行,路由器网关ping不通,报 Destination Host Unreachable,但ping本机地址正常,重启windows系统也可以正常上网。 特来请教各位。下面...
  • 摘 要 谈到网络不能不谈OSI参考模型,虽然OSI参考模型的实际应用意义不是很大,但其的确对于理解网络协议内部的运作很有帮助,也为我们学习网络协议提供了一个很好的参考。OSI参考模型分为七层,虽然国际标准化组织...
  •  0053 找不到网络路径。  0054 网络正忙。  0055 指定的网络资源或设备已不可用。  0056 已经达到网络命令的极限。  0057 网络适配器出现错误。  0058 指定的服务器无法执行所请求的操作。  0059...
  • 但是我在试图使用动态模块时却顺利,这让我对这种操作系统的配置复杂性有一点却步,感觉上手有一点难,其实还可以做的更好一些。 最后感谢主办方提供了这么好的一个平台,让我学了许多RT-Thread操作系统的特性。...
  • BCP详细参数.txt

    2009-12-28 23:34:10
    如果要求一个较大的数据包而得不到,则使用默认设置。bcp 生成的性能统计显示出所使用数据包的大小。 -S server_name[\instance_name] 指定要连接到的 SQL Server 实例。指定 server_name 以连接该服务器上的 SQL ...
  • 通过在战斗中出现增援截获的数据包,我们会发现服务器端发送了这样一个包: 复制内容剪贴板 代码:F4 44 12 E9 EB 03 F8 05 02 00 00 03 00 00 00 00 00 00 第5-第8个字节为增援NPC的代码(这里我们就简单的以黄狗...
  • 什么是VLAN

    2013-10-23 09:59:12
    增加网络连接的灵活性  借助VLAN技术,将不同地点、不同网络、不同用户组合在一起,形成一个虚拟的网络环境,就像使用本地LAN一样方便、灵活、有效。VLAN可以降低移动或变更工作站地理位置的管 理费用,特别是...
  • windows实用dos命令大全

    2010-12-10 21:27:35
    若找不到该文件,则根据PATH命令所设置的路径,顺序逐条地到目录中搜索该文件;  (2)PATH命令中的路径,若有两条以上,各路径之间以一个分号“;”隔开;  (3)PATH命令有三种使用方法:  PATH[盘符1:][路径1...
  • 蓝牙 Beacon 是建立在低功耗蓝牙协议基础上的一种广播协议,同时它也是拥有这个协议的一款低功耗蓝牙设备(从机),但是不能和任何低功耗蓝牙主机进行连接,借此向周围进行连续性广播。 1、作用 蓝牙 Beacon 是一...
  • 飞鸽传书(IPMessenger) 源码

    热门讨论 2010-06-29 14:10:51
     例如, 连接到一个 C 类子网(即 24 位网络号, 8 位主机号), IP 地址为  aaa.bbb.ccc.ddd, 其广播地址即为: aaa.bbb.ccc.255  若对方处于另一个私有子网中, 广播可能无效.  - 更多问题, 请参阅相关资料或咨询你的...
  • (2)strcat把strSrc 的内容连接到strDest,为什么还要char * 类型的返回值? 答:方便赋值给其他变量 6.MFC中CString是类型安全类么? 答:不是,其它数据类型转换CString可以使用CString的成员函数Format来...
  • 多播 Multicast Socket示例

    热门讨论 2007-10-05 16:18:02
    相对于极度消耗网络带宽的广播来说(广播只能在intranet内广播),UDP组播有了很大的优化,只有终端加入了一个广播组,UDP组播的数据才能被他接受. UDP组播是采用的无连接,数据报的连接方式,所以是可靠的....
  • 多播 Multicast Socket

    2007-08-06 16:39:05
    相对于极度消耗网络带宽的广播来说(广播只能在intranet内广播),UDP组播有了很大的优化,只有终端加入了一个广播组,UDP组播的数据才能被他接受. UDP组播是采用的无连接,数据报的连接方式,所以是可靠的....
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    不同的是,暴风影音将Media Player Classic改成了自己的名字并加入了许多的解码器,打包成自己的产品,其实这也无可厚非,关键就在于其作者老爱把里面捆绑一些我们用不到的软件. TT--仿qq+p2p通讯(nat穿透) VC++遍历...
  • vlan学习笔记

    2008-04-22 08:54:49
    随着宽带连接的普及,宽带路由器(或者叫IP共享器)变得较为常见,但是需要注意的是,它们上面虽然带着多个(一般为4个左右)连接LAN一侧的网络接口,但那实际上是路由器内置的交换机,并不能分割广播域。...

空空如也

空空如也

1 2 3
收藏数 45
精华内容 18
关键字:

网络连接数据包能发送但是收不到