前言
哥最近被一家叫作上海**
網絡科技有限公司的
坑了,這個傢伙通過哥鑑定,是假程序員,每一年能賺錢,但總自稱企業家,臉不紅,真是能夠的。因此在哥爲了救他於水火中的那兩個月中,完全花力氣搞定了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