成人免费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

2022-03-14 14:47:21

HarmonyOS操作系統鴻蒙

2022-07-27 08:16:22

搜索引擎Lucene

2022-01-08 20:04:20

攔截系統調用

2023-04-26 12:46:43

DockerSpringKubernetes

2022-12-07 08:42:35

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程序打包

2016-04-27 09:49:16

用戶模型產品總結

2009-11-09 14:57:37

WCF上傳文件

2024-10-16 11:40:47

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品日韩一区二区电影 | 亚洲成人精品国产 | 欧美极品在线观看 | 不卡视频在线 | 色婷婷婷婷色 | 日韩在线播放网址 | av在线成人| 91精品国产综合久久久动漫日韩 | 色男人天堂av | 91秦先生艺校小琴 | 九九综合 | 成人福利网 | 日韩高清av | 国产玖玖 | 国产婷婷色综合av蜜臀av | 免费在线观看av网址 | 嫩草视频在线 | 日本成人综合 | 国产高清在线精品一区二区三区 | 欧美日韩精品免费 | 国产精品久久久久久久久久妞妞 | 精品国产一区一区二区三亚瑟 | 久久久国产亚洲精品 | 久久性| 久久亚洲精品视频 | 黄色91在线 | 中文字字幕一区二区三区四区五区 | 狠狠操狠狠操 | 国产精品美女久久久久久不卡 | 亚洲欧美在线一区 | 日韩精品在线看 | 精品一区电影 | 四虎av电影 | 午夜精品在线观看 | www.成人免费视频 | wwwxxx日本在线观看 | 国产精品区一区二区三区 | 黄毛片 | 一级视频在线免费观看 | 在线精品亚洲欧美日韩国产 | 成人欧美日韩一区二区三区 |