Java基礎—socket--TCP-客戶端服務器模式


1、先看下API:

涉及到的類:Socket 、ServerSocket 、InetSocketAddress

Socket 類

java.lang.Object
   java.net.Socket 
直接已知子類: SSLSocket
public class Socket extends Object
 
        

此類實現客戶端套接字(也可以就叫“套接字”)。套接字是兩台機器間通信的端點。

套接字的實際工作由 SocketImpl 類的實例執行。應用程序通過更改創建套接字實現的套接字工廠可以配置它自身,以創建適合本地防火牆的套接字。


ServerSocket 類

java.lang.Object
  java.net.ServerSocket
直接已知子類: SSLServerSocket
public class ServerSocket extends Object
 
        

此類實現服務器套接字。服務器套接字等待請求通過網絡傳入。它基於該請求執行某些操作,然后可能向請求者返回結果。

服務器套接字的實際工作由 SocketImpl 類的實例執行。應用程序可以更改創建套接字實現的套接字工廠來配置它自身,從而創建適合本地防火牆的套接字。


  InetSocketAddress 類

java.lang.Object
  java.net.SocketAddress 
    java.net.InetSocketAddress
所有已實現的接口: Serializable
public class InetSocketAddress extends SocketAddress
 
        

此類實現 IP 套接字地址(IP 地址 + 端口號)。它還可以是一個對(主機名 + 端口號),在此情況下,將嘗試解析主機名。如果解析失敗,則該地址將被視為未解析 地址,但是其在某些情形下仍然可以使用,比如通過代理連接。

它提供不可變對象,供套接字用於綁定、連接或用作返回值。


2、需求1:實現一個TCP Client,向服務器發送文本數據

TCPDemo.java---創建Socket服務

package com.Train;

import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.io.OutputStream;

import org.omg.CORBA.portable.OutputStream;

//TCP--------面向連接
/**客戶端-服務器模式
 * 1、連接 
 * 2、發送數據
 * 3、斷開連接
 * */

//需求1:程序實現客戶端,給服務器發送文本數據

public class TCPDemo {

    public static void main(String[] args) throws Exception { 
        /**方法一:創建客戶端的Socket服務--  一創建Socket就連接目地服務器
         * Socket sok = new Socket(InetAddress.getByName("192.168.1.150"), 2000);
         * */
        /**方法二:==分步
         * 1、創建客戶端的Socket服務
         * 2、連接目地服務器
         * 3、獲取通路中的輸出流,寫送數據
         * 4、關閉Socket服務
         * */
         Socket sok = new Socket(); 
         
         sok.connect(new InetSocketAddress(InetAddress.getByName("192.168.1.150"), 2000)); //連接服務器
         
             //通路一建立,流就有了
             //為了發送數據,要獲取Socket流中的輸出流
            OutputStream outS = sok.getOutputStream();
          outS.write("this is data".getBytes());
         
          sok.close();
    } 
}

服務器: 接收數據並顯示

image

3、需求2:實現一個TCP Server,接收客戶端的數據並打印,把接收到的數據發送回去

TCPDemo.java

package com.Train;
 
import java.net.ServerSocket;
import java.net.Socket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
 

//TCP--------面向連接
/**客戶端-服務器模式
 * 1、連接 
 * 2、發送數據
 * 3、斷開連接
 * */

//需求2:程序實現服務器 ,TCP server,監聽連接,連接,通過流讀取數據,發送數據


public class TCPDemo {

    public static void main(String[] args) throws Exception { 
        
        /**ServerSocket服務=======================
         * */
        //1、建立服務
         ServerSocket svSok = new ServerSocket(9000);
         
         //2、阻塞監聽,並負責接受連接-------------返回值:Socket
         Socket sok = svSok.accept();   
         
         //3、已連接,獲取對方ip及端口,獲取通道的流管道讀取數據,發送數據
         // 3.1 得到客戶端的流,使用輸入流進行讀取  ------> new BufferedReader(new InputStreamReader(sok.getInputStream())).readline()
         //         讀取數據
         // 3.2 將讀取到的數據原文發送回去
         System.out.println("【Receive from "+sok.getInetAddress().getHostAddress()+": "+sok.getPort()+"】");
          
         BufferedReader brReader = new BufferedReader(new InputStreamReader(sok.getInputStream()));
         String recvStrs = brReader.readLine(); //阻塞讀--|-->
         System.out.println(recvStrs);
          
         //BufferedWriter brWriter = new BufferedWriter(new OutputStreamWriter(sok.getOutputStream()));
         //brWriter.write("received");
         OutputStream outS = sok.getOutputStream();
         outS.write(recvStrs.getBytes());
    } 
}

<console>TCP Server:

image

TCP Client:

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM