傻逼單線程搞定安卓端 和 loop在iOS實現Socket TCP&UDP通訊(待續)

前言
哥最近被一家叫作上海** 網絡科技有限公司的 坑了,這個傢伙通過哥鑑定,是假程序員,每一年能賺錢,但總自稱企業家,臉不紅,真是能夠的。因此在哥爲了救他於水火中的那兩個月中,完全花力氣搞定了Socket通訊中那些坑。
那麼下面咱們就來說講,Socket中的那些坑和你們都懂的事情吧。前端

1、找到你的硬件 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/1c0fBDQgsocket

哥電話是15201950688。ide

歡迎在上海的朋友交流一下下,另注:哥只提供代碼上的指導,不提供關於協議部分的指教,那個是人家的寫的,不是哥寫的,哥本身過段時間也會本身擬一套,必定改三處以上不一樣,保證改三百處不同,那TMD就是套新的,呵呵。學習

最後同那個坑人的人說一句 :哥比你有節操,哥的代碼屬於全人類,你用了哥不介意,可是你賺昧良心的錢,還義正詞嚴,就不對了,哥在這裏批評你這個70後一下,順便替上海交通大學MBA那種提個醒,之後招生的時候,麻煩長個心眼,今年哥是第二次被大家家的學生坑到了。ui

相關文章
相關標籤/搜索