资讯专栏INFORMATION COLUMN

傻逼单线程搞定安卓端 和 loop在iOS实现Socket TCP&UDP通信(待续)

liuyix / 2865人阅读

摘要:所以在哥为了救他于水火中的那两个月中,彻底花力气搞定了通信中那些坑。参数一要发送的数据参数二数据的长度参数三服务端的网络地址参数四服务器端端口号把数据发送到服务端。

前言
哥最近被一家叫做上海**网络科技有限公司的坑了,这个家伙经过哥鉴定,是假程序员,每年能赚钱,但总自称企业家,脸不红,真是可以的。所以在哥为了救他于水火中的那两个月中,彻底花力气搞定了Socket通信中那些坑。
那么下面我们就来讲讲,Socket中的那些坑和大家都懂的事情吧。

一、找到你的硬件 UDP
找到你的硬件是件不容易的事情,所以你最好一上来广播一下,然后设备要是收到特定的字符串,然后直接返回一下自己的IP地址就可以了(这招特别常见,所以大家不要顾虑是不是会有泄露别人协议或者得坐牢的风险。妈蛋地你不用这招,你能用哪招?!那么常见的招,还要算什么狗屁只知识产权,就真TMD无语了)。

【Android】

//发起一个UDP
    public void connectServerWithUDPSocket(String IP,int PORT,String message,String type) {
        DatagramSocket socket_send;
        try {
            //创建DatagramSocket对象并指定一个端口号,注意,如果客户端需要接收服务器的返回数据,
            //还需要使用这个端口号来receive,所以一定要记住
            socket_send = new DatagramSocket(PORT);
            //使用InetAddress(Inet4Address).getByName把IP地址转换为网络地址
            InetAddress serverAddress = InetAddress.getByName(IP);
            //Inet4Address serverAddress = (Inet4Address) Inet4Address.getByName("192.168.1.32");
            String str = message;//设置要发送的报文
            byte data[] = str.getBytes();//把字符串str字符串转换为字节数组
            //创建一个DatagramPacket对象,用于发送数据。
            //参数一:要发送的数据  参数二:数据的长度  参数三:服务端的网络地址  参数四:服务器端端口号
            DatagramPacket packet = new DatagramPacket(data, data.length ,serverAddress ,48899);
            socket_send.send(packet);//把数据发送到服务端。
            flag=1;
            System.out.println("发送成功");
            socket_send.close();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

//接受UDP的广播返回
    public void ReceiveServerSocketData(int PORT,String type) {
            DatagramSocket socket_receive;
            try {

                System.out.println("开始接收");
                //实例化的端口号要和发送时的socket一致,否则收不到data
                socket_receive = new DatagramSocket(PORT);
                byte data[] = new byte[4 * 1024];
                //参数一:要接受的data 参数二:data的长度
                DatagramPacket packet = new DatagramPacket(data, data.length);
                int sr = 1;

                    while (sr == 1) {
                        socket_receive.receive(packet);
                        System.out.println("接受中……");
                        alertUdp = (TextView) findViewById(R.id.alertUDP);
                        alertUdp.setVisibility(View.GONE);
                        break;
                    }
                    //把接收到的data转换为String字符串
                    String result = new String(packet.getData(), packet.getOffset(), packet.getLength());
                    socket_receive.close();//不使用了记得要关闭
                    System.out.println("the number of reveived Socket is  :" + flag + " udpData:" + result);
                    if (type.equals("Start")) {
                        String[] result_arr = result.split(",");
                        SERVER_IP = result_arr[0];
                        System.out.println("新SERVER_IP:" + SERVER_IP);
                    } else if (type.equals("F0")) {
                    } 
//                A1
                    }else if (type.equals("G5")){
                        renew_v();
                        System.out.println(wifi_udp);
                        new AlertDialog.Builder(MyActivity.this)
                                .setTitle("收到G5的信息返回")
                                .setMessage("弹出一个警告框 告知大家内容")
                                .setPositiveButton("我知道了", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        System.exit(0);
                                    }
                                })
                                .show();

                    }else if (type.equals("G0")){
                        wifi_udp=0;
                    }
                    if (result.equals("...某指定内容...如果要计数时使用...")){
                        wifi_udp++;
                    }
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    }

【iOS】
(待续...)

================
哥有点不想写了,至于后面的,哥为了避免法律纠纷,在代码中把相关的一些变量给删除一下下,然后直接搞个百度云盘挂出来,欢迎大家学习和交流。

百度云盘链接:http://pan.baidu.com/s/1c0fBDQg

哥电话是15201950688。

欢迎在上海的朋友交流一下下,另注:哥只提供代码上的指导,不提供关于协议部分的指教,那个是人家的写的,不是哥写的,哥自己过段时间也会自己拟一套,一定改三处以上不同,保证改三百处不一样,那TMD就是套新的,呵呵。

最后同那个坑人的人说一句:哥比你有节操,哥的代码属于全人类,你用了哥不介意,但是你赚昧良心的钱,还理直气壮,就不对了,哥在这里批评你这个70后一下,顺便替上海交通大学MBA那种提个醒,以后招生的时候,麻烦长个心眼,今年哥是第二次被你们家的学生坑到了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12134.html

相关文章

  • 逼单线程搞定安卓 loopiOS实现Socket TCP&UDP通信待续

    摘要:所以在哥为了救他于水火中的那两个月中,彻底花力气搞定了通信中那些坑。参数一要发送的数据参数二数据的长度参数三服务端的网络地址参数四服务器端端口号把数据发送到服务端。 前言 哥最近被一家叫做上海**网络科技有限公司的坑了,这个家伙经过哥鉴定,是假程序员,每年能赚钱,但总自称企业家,脸不红,真是可以的。所以在哥为了救他于水火中的那两个月中,彻底花力气搞定了Socket通信中那些坑。 那么下...

    ygyooo 评论0 收藏0
  • Android网络编程之Socket

    摘要:面向字节流流,指的是流入到进程或从进程流出的字符序列。即收到连接信息后向返回确认信息第三次握手客户端收到服务器的报文段,并向服务器发送报文段。 前言 Socket的使用在 Android网络编程中非常重要 今天我将带大家全面了解 Socket 及 其使用方法 目录 showImg(https://segmentfault.com/img/remote/14600000113508...

    The question 评论0 收藏0
  • Android网络编程之Socket

    摘要:面向字节流流,指的是流入到进程或从进程流出的字符序列。即收到连接信息后向返回确认信息第三次握手客户端收到服务器的报文段,并向服务器发送报文段。 前言 Socket的使用在 Android网络编程中非常重要 今天我将带大家全面了解 Socket 及 其使用方法 目录 showImg(https://segmentfault.com/img/remote/14600000113508...

    xingpingz 评论0 收藏0
  • 网络编程 -- 从 Socket 编程 到 OkHttp 框架

    摘要:如端口号分为标准既定的端口号其中知名端口号由组成。协议中,使用数据报为传输单位。用于直播等网速要求较高的应用端到端的通信类本机地址随机指定发送与接收数据报为和等网络层以上的包的单位。 前言 最近在做一个项目的时候,因为项目要求跨域连接。所以,使用了Okhttp框架。其内部原理是基于 socket 网络编程的。因为自己在这方面比较薄弱,所以写这一篇文章进行相关的总结。 基础知识(参考 图...

    BWrong 评论0 收藏0
  • 网络编程 -- 从 Socket 编程 到 OkHttp 框架

    摘要:如端口号分为标准既定的端口号其中知名端口号由组成。协议中,使用数据报为传输单位。用于直播等网速要求较高的应用端到端的通信类本机地址随机指定发送与接收数据报为和等网络层以上的包的单位。 前言 最近在做一个项目的时候,因为项目要求跨域连接。所以,使用了Okhttp框架。其内部原理是基于 socket 网络编程的。因为自己在这方面比较薄弱,所以写这一篇文章进行相关的总结。 基础知识(参考 图...

    刘福 评论0 收藏0

发表评论

0条评论

liuyix

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<