JAVA Socket基礎(簡單實現)

來源:互聯網
上載者:User

標籤:概念   sock   串連   資料包   資源   pack   local   常用   oca   

學習Socket需要瞭解的幾個概念:

Socket 指的是互連網串連中的各個終結點。互連網串連是怎麼建立的,通過IP地址加連接埠號碼,進行互連。

A電腦(192.168.3.125:80)》》》》B電腦(192.168.3.111:80)   那麼這一個個的Ip地址+連接埠號碼就是一個Socket(通訊端。)

Http協議:兩台互連網的通訊需要遵守統一的應用程式層協議,通常指Http協議。應用程式層協議還有FTP協議,SMPT簡單郵件協議等。

底層協議:IP/TCP協議。除了http需要遵守,還需要遵守IP/TCP協議。

URL: 應用程式層協議+IP地址+連接埠號碼+資源路徑    例如  http://www.baidu.com/index.html;   (http協議預設遵守的連接埠號碼為80)    檔案傳輸預設為21    遠程登入Telnet 23

 

Java中提供的支援Socket操作的幾個常用類:

InetAddress :就是表示IP地址啦,沒有建構函式。可以用過靜態方法InetAddress.getLocalhost()等方法來或者原生InetAddress對象。toString方法就是列印IP地址。其他方法請參見api文檔。

URL: 資來源物件。   就是上面所說的URL對象。

Socket:send方法,getOutPutStream()  getInputStream()等

DatagramSocket:資料包,UDP傳輸儲存資料的類。

 

IP/TCP傳輸:有序,規則,穩定安全。但速度較慢。

服務端:

 

package tcp_ip;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;/** * tcp/ip傳輸  伺服器端 * @author Administrator * */public class Server {    public static void main(String[] args) throws IOException {        //建立伺服器端socket        ServerSocket serverSocket = new ServerSocket(9999);        //建立指定連接埠的serverSocket後  設定監聽狀態! 會阻塞        System.out.println("socket服務端啟動成功!正在監聽9999連接埠......");        Socket socket = serverSocket.accept();        //成功接收到請求後會返回一個socket        InputStream is = socket.getInputStream();        InputStreamReader isr = new InputStreamReader(is);        BufferedReader reader = new BufferedReader(isr);        String data = reader.readLine();        while(data!=null&&!data.equals("")){            System.out.println(data);            data=reader.readLine();        }        reader.close();        isr.close();        is.close();        socket.close();            }}

 

用戶端:

 

package tcp_ip;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.Socket;public class Client {    public static void main(String[] args) throws Exception {        //建立client用戶端指定目標ip及連接埠 (即目標socket)        Socket socket = new Socket("localhost", 9999);        //或者這個socket的輸出資料流        OutputStream outputStream = socket.getOutputStream();        OutputStreamWriter writer = new OutputStreamWriter(outputStream);        writer.write("我是用戶端,我發送給你的內容是"+"你好啊!服務端!");        writer.close();        outputStream.close();        socket.close();    }}

 

//多線程版本:

服務端:

 

package tcp_ip;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class ServerThread {    public static void main(String[] args) throws IOException {        //建立伺服器端socket        ServerSocket serverSocket = new ServerSocket(9999);        //建立指定連接埠的serverSocket後  設定監聽狀態! 會阻塞        System.out.println("socket服務端啟動成功!正在監聽9999連接埠......");                while(true){            Socket socket = serverSocket.accept();            new RunThread(socket).start();        }    }}

 

 

用戶端:

package tcp_ip;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.Socket;public class Client {    public static void main(String[] args) throws Exception {        //建立client用戶端指定目標ip及連接埠 (即目標socket)        Socket socket = new Socket("localhost", 9999);        //或者這個socket的輸出資料流        OutputStream outputStream = socket.getOutputStream();        OutputStreamWriter writer = new OutputStreamWriter(outputStream);        writer.write("我是用戶端,我發送給你的內容是"+"你好啊!服務端! 又給你發啦~~");        writer.close();        outputStream.close();        socket.close();    }}

 

 

UDP傳輸:無序,不規則,不安全,速度快。

服務端:

 

package udp;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;import java.net.UnknownHostException;/** * udp用戶端 * @author Czt *  */public class Client {    public static void main(String[] args) {        try {            String data=new String("你好啊!----來自用戶端的訊息!".getBytes(),"utf-8");            DatagramPacket datagramPacket = new DatagramPacket(data.getBytes(),data.length(),InetAddress.getLocalHost(),7788);            DatagramSocket socket = new DatagramSocket();            socket.send(datagramPacket);        } catch (UnknownHostException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (SocketException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }            }}

 

用戶端:

 

package udp;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;import java.net.UnknownHostException;/** * udp用戶端 * @author Czt *  */public class Client {    public static void main(String[] args) {        try {            String data=new String("你好啊!----來自用戶端的訊息!".getBytes(),"utf-8");            DatagramPacket datagramPacket = new DatagramPacket(data.getBytes(),data.length(),InetAddress.getLocalHost(),7788);            DatagramSocket socket = new DatagramSocket();            socket.send(datagramPacket);        } catch (UnknownHostException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (SocketException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }            }}

 

JAVA Socket基礎(簡單實現)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.