日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
手把手教你 Socket 通信(TCP/IP)

網(wǎng)絡(luò)上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換,這個連接的一端稱為一個socket。

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

下載eclipse:

https://www.eclipse.org/

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

效果如圖:

在eclipse中,F(xiàn)ile→New→Java Project→起個英文名字→Finish(我起的名字是TCP)

目錄結(jié)構(gòu):

新建完以后有個src默認(rèn)包,右鍵 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("從客戶端接受的數(shù)據(jù):"+"\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("服務(wù)器端");              //窗體名稱  
  24.   f.setLocation(300, 300);           //窗體出現(xiàn)位置 
  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("向服務(wù)器端發(fā)送的數(shù)據(jù):"); 
  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.     } 

然后先運行服務(wù)器,再運行客戶端,否則會報錯,因為Socket通信本質(zhì)是先打開服務(wù)器監(jiān)聽端口。然后就會出現(xiàn)效果圖。

本機回環(huán) IP 是 127.0.0.1,你可以改為其他 IP 地址,即可實現(xiàn)跨機 Socket 通信。

本文轉(zhuǎn)載自微信公眾號「嵌入式Linux系統(tǒng)開發(fā)」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系嵌入式Linux系統(tǒng)開發(fā)眾號。


文章標(biāo)題:手把手教你 Socket 通信(TCP/IP)
文章分享:http://www.5511xx.com/article/coohihc.html