手把手教你 Socket 通訊(TCP/IP)
導讀 | 本文將給出完整 Socket 通訊程式碼,在 eclipse 中親測有效。在Android Studio中用Java開發也是一樣的,只是把程式碼和控制元件搭配一下,註冊監聽就好。 |
網路上的兩個程式透過一個雙向的通訊連線實現資料的交換,這個連線的一端稱為一個socket。
建立網路通訊連線至少要一對埠號(socket)。socket 本質是程式設計介面(API),對TCP/IP的封裝,TCP/IP也要提供可供程式設計師做網路開發所用的介面,這就是Socket程式設計介面;HTTP是轎車,提供了封裝或者顯示資料的具體形式;Socket是發動機,提供了網路通訊的能力。
下載eclipse:
本文將給出完整 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(因為我程式裡面用的這個類名稱)
兩個裡面分別貼上程式碼:
package com.net; import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; public class TCPServer { static DataInputStream dis=null; public static void main(String[] args){ boolean started=false; Socket s=null; TextArea ta=new TextArea(); ta.append("從客戶端接受的資料:"+"\n"); ServerSocket ss=null; try{ ss=new ServerSocket(8866); //埠號 }catch(BindException e){ System.exit(0); }catch(IOException e){ e.printStackTrace(); } Frame f=new Frame("伺服器端"); //窗體名稱 f.setLocation(300, 300); //窗體出現位置 f.setSize(200, 200); //窗體大小 f.add(ta,BorderLayout.NORTH); f.pack(); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); f.setVisible(true); try{ //try-catch塊捕捉異常 started=true; while(started){ boolean bConnected=false; s=ss.accept(); bConnected=true; dis=new DataInputStream(s.getInputStream()); while(bConnected){ String str=dis.readUTF(); ta.append(str+"\n"); } } }catch(EOFException e){ System.out.println("Client closed!"); }catch(IOException e){ e.printStackTrace(); }finally{ try{ if(dis!=null) dis.close(); if(s!=null) s.close(); }catch(Exception e){ e.printStackTrace(); } } } }
package com.net; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; public class TCPClient extends Frame{ Socket s=null; DataOutputStream dos=null; DataInputStream dis=null; TextField tf=new TextField(40); List list=new List(6); public static void main(String[] args){ TCPClient client=new TCPClient(); client.list.add("向伺服器端傳送的資料:"); client.setTitle("客戶端"); client.run(); } public void run(){ setLocation(400,300); this.setSize(300, 300); add(tf,BorderLayout.SOUTH); add(list,BorderLayout.NORTH); pack(); this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ disconnect(); System.exit(0); } }); tf.addActionListener(new MyListener()); setVisible(true); connect(); } public void connect(){ try{ s=new Socket("127.0.0.1",8866); dos=new DataOutputStream(s.getOutputStream()); }catch(UnknownHostException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } } public void disconnect(){ try{ dos.close(); s.close(); }catch(IOException e){ e.printStackTrace(); } } private class MyListener implements ActionListener{ public void actionPerformed(ActionEvent e){ String s1=null; String s2=null; String str=tf.getText().trim(); list.add(str); tf.setText(""); try{ dos.writeUTF(str); dos.flush(); }catch(IOException e1){ e1.printStackTrace(); } } } }
然後先執行伺服器,再執行客戶端,否則會報錯,因為Socket通訊本質是先開啟伺服器監聽埠。然後就會出現效果圖。
本機迴環 IP 是 127.0.0.1,你可以改為其他 IP 地址,即可實現跨機 Socket 通訊。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2790910/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android TCP socket通訊AndroidTCP
- Linux學習/TCP Socket通訊LinuxTCP
- TCP/IP 和SocketTCP
- 網路通訊——socket(TCP/IP).Http,同步和非同步的區別TCPHTTP非同步
- TCP/IP 通訊傳輸流TCP
- socket,TCP/IP的理解TCP
- TCP/IP的通訊過程-VeCloudTCPCloud
- socket與TCP/IP區別TCP
- TCP/IP、HTTP和Socket總結TCPHTTP
- Socket與TCP/IP的關係TCP
- Windows Socket程式設計精華《TCP通訊伺服器》Windows程式設計TCP伺服器
- Socket,TCP,UDP,HTTP基本通訊原理和OC版本DemoTCPUDPHTTP
- socket通訊
- 圖形介面的TCP/IP簡單通訊TCP
- SOCKET通訊中TCP、UDP資料包大小的確定TCPUDP
- 手把手教你寫 Socket 長連線
- C#使用TCP/IP與ModBus進行通訊C#TCP
- TCP通訊TCP
- unix socket通訊
- 分分鐘讀懂tcp/ip通訊協議原理(含視訊)TCP協議
- 【Windows socket+IP+UDP+TCP】網路基礎WindowsUDPTCP
- modbus tcp通訊TCP
- 乾貨!手把手教你如何使用第三方通訊服務實現LayIM Socket元件開發。元件
- 程式間通訊(Socket)
- socket.IO通訊
- Android Socket 通訊Android
- socket通訊的建立
- php的socket通訊PHP
- 【Python】socket通訊Python
- 區分socket連線和tcp/ip連線TCP
- TCP/IP--圖解從URL到網頁通訊原理TCP圖解網頁
- TCP/IP、HTTP、socket 這些,你真的瞭解嗎?TCPHTTP
- Socket、TCP/IP、HTTP、FTP及網路程式設計TCPHTTPFTP程式設計
- socket.io通訊原理
- 簡單的Socket通訊
- Socket套接字通訊原理
- TCP/IP通訊程式設計的豐富多樣性(轉)TCP程式設計
- 網路通訊2:TCP通訊實現TCP