Android Socket編程(udp)初探

前言

昨天剛把socket tcp編程簡單講解了诚啃,今天趁熱打鐵把udp編程也講一下浆竭。一個是為了提醒自己,堅持下去吧秕,另外還是為了提升技術(shù)打下基礎(chǔ)琉闪。如果講的有什么不對的還請各位指正。

首先

先上圖砸彬,俗話說no pic say a xx


udp編程服務(wù)端.png
udp編程客戶端.png

其次

  • 客戶端代碼(線程中)

    public class UdpClientThread extends Thread {
    
    //IP地址
    private String mAddress;
    //端口
    private int port;
    //發(fā)送內(nèi)容
    private String msg;
    private Handler mHandler;
    
    public UdpClientThread(Handler handler, String address, int port, String msg) {
      this.mHandler = handler;
      this.mAddress = address;
      this.port = port;
      this.msg = msg;
    }
    
    @Override
    public void run() {
      super.run();
      sendSocket();
    }
    
    /**
     * 設(shè)置
     */
    private void sendSocket() {
      byte[] bytes = msg.getBytes();
      try {
          /*******************發(fā)送數(shù)據(jù)***********************/
          InetAddress address = InetAddress.getByName(mAddress);
          //1.構(gòu)造數(shù)據(jù)包
          DatagramPacket packet = new DatagramPacket(bytes, 
    bytes.length, address, port);
          //2.創(chuàng)建數(shù)據(jù)報套接字并將其綁定到本地主機上的指定端口颠毙。
          DatagramSocket socket = new DatagramSocket();
          //3.從此套接字發(fā)送數(shù)據(jù)報包。
          socket.send(packet);
          /*******************接收數(shù)據(jù)***********************/
          //1.構(gòu)造 DatagramPacket砂碉,用來接收長度為 length 的數(shù)據(jù)包蛀蜜。
          final byte[] bytes1 = new byte[1024];
          DatagramPacket receiverPacket = new DatagramPacket(bytes1, bytes1.length);
          socket.receive(receiverPacket);
          sendMsg(0,new String(bytes1, 0, bytes1.length));
          socket.close();
      } catch (UnknownHostException e) {
          e.printStackTrace();
      } catch (SocketException e) {
          e.printStackTrace();
      } catch (IOException e) {
          e.printStackTrace();
      }
    }
    
    /**
     * 發(fā)送消息
     */
    private void sendMsg(int what, Object object) {
      Message msg = new Message();
      msg.what = what;
      msg.obj = object;
      mHandler.sendMessage(msg);
     }
     }
    

說明:這里的封裝和tcp中的一樣,就是換一下參數(shù)和包裝類增蹭,代碼中的解釋都比較清楚滴某。

  • 客戶端(使用)

    public class UdpClientActivity extends AppCompatActivity
      implements View.OnClickListener {
    
    Button mBtnSend;
    String mAddress = "192.168.0.197";
    int port = 12306;
    TextView mTxtContent;
    EditText mEdtContent;
    
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_udp_client);
      initView();
    }
    
    private void initView() {
      mEdtContent = findViewById(R.id.edt_udp_content);
      mBtnSend = findViewById(R.id.btn_udp_send);
      mTxtContent = findViewById(R.id.txt_udp_content);
      mBtnSend.setOnClickListener(this);
    }
    
    
    @Override
    public void onClick(View view) {
      switch (view.getId()) {
          case R.id.btn_udp_send: {
              UdpClientThread mThread = new UdpClientThread(mHandler, mAddress, port,
                      mEdtContent.getText().toString());
              mThread.start();
              break;
          }
      }
    }
    
    /**
     * Handler
     */
    private Handler mHandler = new Handler(Looper.myLooper()) {
      @Override
      public void handleMessage(Message msg) {
          super.handleMessage(msg);
          switch (msg.what) {
              case 0: {
                  String content = (String) msg.obj;
                  mTxtContent.setText(content);
                  break;
              }
          }
      }
    };
    }
    

說明:這里直接點擊按鈕調(diào)用線程使用即可,當(dāng)然滋迈,也可以直接用線程池來構(gòu)造參數(shù)霎奢。

  • 服務(wù)端(代碼)

    public class UdpServer {
    
    /**
     * @param args
     */
    public static void main(String[] args) {
      while (true) {
          getMsg();
      }
    }
    
    /**
     * 獲取信息
     */
    private static void getMsg() {
      try {
          byte[] buf = new byte[1024];
          // 一、接收數(shù)據(jù)
          // 1杀怠、創(chuàng)建接收數(shù)據(jù)的數(shù)據(jù)包
          DatagramPacket packet = new DatagramPacket(buf, buf.length);
          // 2.創(chuàng)建UPD 的 socket
          DatagramSocket socket = new DatagramSocket(12306);
          // 3、接收數(shù)據(jù)
          System.out.println("服務(wù)端開始監(jiān)聽厅克!~~~~");
          socket.receive(packet);
          // 4赔退、處理數(shù)據(jù)
          System.out.println("服務(wù)端:" + new String(buf, 0, buf.length));
    
          // 二、返回數(shù)據(jù)
          DatagramPacket packet2 = new DatagramPacket(buf, buf.length,
                  packet.getAddress(), packet.getPort());
          socket.send(packet2);
          socket.close();
      } catch (Exception e) {
          e.printStackTrace();
      }
    
    }
    
    }
    

最后

嘮叨一下证舟,做事一定要善始善終硕旗,做人一定要誠信(ps:最近遇到了一個不誠信的公司,offer發(fā)了之后女责,第二天告訴我不用去了漆枚,問過原因之后,人事和老板助理回復(fù)還不一樣抵知,這樣就有點好玩了墙基,真的是越想越生氣。尤其是對于我這種對誠信比較看重的人刷喜,真的是不能忍残制。特別痛恨那種答應(yīng)別人卻做不到的人,要不就別答應(yīng)掖疮,要不就做到初茶。我一般答應(yīng)別人的事情,一定會做到浊闪,不管我要付出什么恼布,起碼我兌現(xiàn)了自己的承諾螺戳。)。發(fā)了一頓牢騷折汞,還請各位看官見諒倔幼。

致謝

Android網(wǎng)絡(luò)編程之--Socket編程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市字支,隨后出現(xiàn)的幾起案子凤藏,更是在濱河造成了極大的恐慌,老刑警劉巖堕伪,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揖庄,死亡現(xiàn)場離奇詭異,居然都是意外死亡欠雌,警方通過查閱死者的電腦和手機蹄梢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來富俄,“玉大人禁炒,你說我怎么就攤上這事』舯龋” “怎么了幕袱?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悠瞬。 經(jīng)常有香客問我们豌,道長,這世上最難降的妖魔是什么浅妆? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任望迎,我火速辦了婚禮,結(jié)果婚禮上凌外,老公的妹妹穿的比我還像新娘辩尊。我一直安慰自己,他們只是感情好康辑,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布摄欲。 她就那樣靜靜地躺著,像睡著了一般疮薇。 火紅的嫁衣襯著肌膚如雪蒿涎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天惦辛,我揣著相機與錄音劳秋,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛玻淑,可吹牛的內(nèi)容都是我干的嗽冒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼补履,長吁一口氣:“原來是場噩夢啊……” “哼添坊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起箫锤,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤贬蛙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谚攒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阳准,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年馏臭,在試婚紗的時候發(fā)現(xiàn)自己被綠了野蝇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡括儒,死狀恐怖绕沈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情帮寻,我是刑警寧澤乍狐,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站固逗,受9級特大地震影響浅蚪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抒蚜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一掘鄙、第九天 我趴在偏房一處隱蔽的房頂上張望耘戚。 院中可真熱鬧嗡髓,春花似錦、人聲如沸收津。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撞秋。三九已至长捧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吻贿,已是汗流浹背串结。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肌割。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓卧蜓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親把敞。 傳聞我的和親對象是個殘疾皇子弥奸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344