成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

手把手教你 Socket 通信(TCP/IP)

開發 后端 通信技術
本文將給出完整 Socket 通信代碼,在 eclipse 中親測有效。在Android Studio中用Java開發也是一樣的,只是把代碼和控件搭配一下,注冊監聽就好。

網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket。

建立網絡通信連接至少要一對端口號(socket)。socket 本質是編程接口(API),對TCP/IP的封裝,TCP/IP也要提供可供程序員做網絡開發所用的接口,這就是Socket編程接口;HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網絡通信的能力。

下載eclipse:

https://www.eclipse.org/

本文將給出完整 Socket 通信代碼,在 eclipse 中親測有效。在Android Studio中用Java開發也是一樣的,只是把代碼和控件搭配一下,注冊監聽就好。區別就是在 AS 中 import 的聲明不太一樣,然后窗口不需要自己建立。

效果如圖:

在eclipse中,File→New→Java Project→起個英文名字→Finish(我起的名字是TCP)

目錄結構:

新建完以后有個src默認包,右鍵 src→New→Package→ 輸入 com.net(因為程序里我用的包的名字是這個,你可以同時兩個一起改)→ Finish

然后右鍵 com.net → New → Class → 輸入 TCPClient(因為我程序里面用的這個類名稱)

然后右鍵 com.net → New → Class → 輸入 TCPServer(因為我程序里面用的這個類名稱)

兩個里面分別粘貼代碼:

TCPServer

  1. package com.net; 
  2.  
  3. import java.io.*; 
  4. import java.net.*; 
  5. import java.awt.*; 
  6. import java.awt.event.*; 
  7.  
  8. public class TCPServer { 
  9.  static DataInputStream dis=null
  10.  public static void main(String[] args){ 
  11.   boolean started=false
  12.   Socket s=null
  13.   TextArea ta=new TextArea(); 
  14.   ta.append("從客戶端接受的數據:"+"\n"); 
  15.   ServerSocket ss=null
  16.   try{ 
  17.    ss=new ServerSocket(8866);                       //端口號 
  18.   }catch(BindException e){ 
  19.    System.exit(0); 
  20.   }catch(IOException e){ 
  21.    e.printStackTrace(); 
  22.   } 
  23.   Frame f=new Frame("服務器端");              //窗體名稱  
  24.   f.setLocation(300, 300);           //窗體出現位置 
  25.   f.setSize(200, 200);            //窗體大小 
  26.   f.add(ta,BorderLayout.NORTH); 
  27.   f.pack(); 
  28.   f.addWindowListener(new WindowAdapter(){ 
  29.    public void windowClosing(WindowEvent e){ 
  30.     System.exit(0); 
  31.    } 
  32.   }); 
  33.   f.setVisible(true); 
  34.   try{               //try-catch塊捕捉異常 
  35.    started=true
  36.    while(started){ 
  37.     boolean bConnected=false
  38.     s=ss.accept(); 
  39.     bConnected=true
  40.     dis=new DataInputStream(s.getInputStream()); 
  41.     while(bConnected){ 
  42.         String str=dis.readUTF(); 
  43.         ta.append(str+"\n"); 
  44.     } 
  45.    } 
  46.   }catch(EOFException e){                                  
  47.    System.out.println("Client closed!"); 
  48.   }catch(IOException e){ 
  49.    e.printStackTrace(); 
  50.   }finally{ 
  51.    try{ 
  52.     if(dis!=null
  53.      dis.close(); 
  54.     if(s!=null
  55.      s.close(); 
  56.    }catch(Exception e){ 
  57.     e.printStackTrace(); 
  58.    } 
  59.   } 
  60.  } 

TCPClient

  1. package com.net; 
  2. import java.awt.*; 
  3. import java.awt.event.*; 
  4. import java.io.*; 
  5. import java.net.*; 
  6.  
  7. public class TCPClient extends Frame{ 
  8.  Socket s=null
  9.  DataOutputStream dos=null
  10.  DataInputStream  dis=null
  11.  TextField tf=new TextField(40); 
  12.  List list=new List(6); 
  13.  public static void main(String[] args){ 
  14.   TCPClient client=new TCPClient(); 
  15.   client.list.add("向服務器端發送的數據:"); 
  16.   client.setTitle("客戶端"); 
  17.   client.run(); 
  18.  } 
  19.  public void run(){ 
  20.   setLocation(400,300); 
  21.   this.setSize(300, 300); 
  22.   add(tf,BorderLayout.SOUTH); 
  23.   add(list,BorderLayout.NORTH); 
  24.   pack(); 
  25.   this.addWindowListener(new WindowAdapter(){ 
  26.    public void windowClosing(WindowEvent e){ 
  27.     disconnect(); 
  28.     System.exit(0); 
  29.    } 
  30.   }); 
  31.   tf.addActionListener(new MyListener()); 
  32.   setVisible(true); 
  33.   connect(); 
  34.  } 
  35. public void connect(){ 
  36.  try{ 
  37.   s=new Socket("127.0.0.1",8866); 
  38.   dos=new DataOutputStream(s.getOutputStream()); 
  39.  }catch(UnknownHostException e){ 
  40.   e.printStackTrace(); 
  41.  }catch(IOException e){ 
  42.   e.printStackTrace(); 
  43.  } 
  44. public void disconnect(){ 
  45.  try{ 
  46.   dos.close(); 
  47.   s.close(); 
  48.  }catch(IOException e){ 
  49.   e.printStackTrace(); 
  50.  } 
  51. private class MyListener implements ActionListener{ 
  52.     public void actionPerformed(ActionEvent e){ 
  53.       String s1=null
  54.       String s2=null
  55.       String str=tf.getText().trim(); 
  56.       list.add(str); 
  57.       tf.setText(""); 
  58.       try{ 
  59.        dos.writeUTF(str); 
  60.        dos.flush(); 
  61.       }catch(IOException e1){ 
  62.          e1.printStackTrace();   
  63.       } 
  64.       } 
  65.     } 

然后先運行服務器,再運行客戶端,否則會報錯,因為Socket通信本質是先打開服務器監聽端口。然后就會出現效果圖。

本機回環 IP 是 127.0.0.1,你可以改為其他 IP 地址,即可實現跨機 Socket 通信。

本文轉載自微信公眾號「嵌入式Linux系統開發」,可以通過以下二維碼關注。轉載本文請聯系嵌入式Linux系統開發眾號。

 

 

責任編輯:姜華 來源: 嵌入式Linux系統開發
相關推薦

2011-01-10 14:41:26

2025-05-07 00:31:30

2011-05-03 15:59:00

黑盒打印機

2021-07-14 09:00:00

JavaFX開發應用

2011-02-22 13:46:27

微軟SQL.NET

2021-02-26 11:54:38

MyBatis 插件接口

2021-12-28 08:38:26

Linux 中斷喚醒系統Linux 系統

2020-03-08 22:06:16

Python數據IP

2023-04-26 12:46:43

DockerSpringKubernetes

2022-01-08 20:04:20

攔截系統調用

2022-07-27 08:16:22

搜索引擎Lucene

2022-12-07 08:42:35

2022-03-14 14:47:21

HarmonyOS操作系統鴻蒙

2021-07-03 09:04:22

XPathPython免費代理IP

2020-07-09 08:59:52

if else模板Service

2020-04-14 10:20:12

MySQL數據庫死鎖

2011-01-06 10:39:25

.NET程序打包

2011-03-25 12:45:49

Oracle SOA

2024-10-16 11:40:47

2016-04-27 09:49:16

用戶模型產品總結
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品视频在线观看 | 欧美日本免费 | 国产超碰人人爽人人做人人爱 | 丁香久久 | 精品日韩一区二区 | 日韩免费在线观看视频 | 欧美激情综合五月色丁香小说 | 午夜日韩精品 | 最新免费视频 | 毛片av免费看 | 夜夜av| 午夜在线精品 | 欧美精品一区二区三区在线四季 | a久久久久久 | 欧美一区二区三 | 99pao成人国产永久免费视频 | 亚洲欧美另类在线观看 | 国产成人免费视频 | 91性高湖久久久久久久久_久久99 | 亚洲第一网站 | 亚洲欧美日韩系列 | 亚洲福利精品 | 欧美成人精品一区 | 色综合99| 成人免费视频网址 | 国产1区2区在线观看 | 免费黄色大片 | 久久人人爽人人爽人人片av免费 | 视频一区 国产精品 | 亚洲成av人影片在线观看 | 国产精品久久久久久久久婷婷 | 中文字幕在线不卡 | 日韩av三区 | 国产一区二区三区四区五区加勒比 | 国产免费又黄又爽又刺激蜜月al | 国产成人精品久久二区二区91 | 亚洲欧美一区二区三区在线 | 亚洲人成人一区二区在线观看 | 亚洲国产精品久久 | 久久精品国产99国产精品 | 久久一热 |