91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java后端開發中TCP通信傳輸協議怎么用

發布時間:2021-09-29 09:06:11 來源:億速云 閱讀:145 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Java后端開發中TCP通信傳輸協議怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

ServerSocket --監聽客戶端的連接,他的作用主要是建立一個連接
-ServerSocket -建立連接,拿到一個Socket
-Telnet 127.0.0.1 8888- 客戶端使用Telnet訪問服務端 建立連接
-服務端可以拿到一個Socket的對象
-獲取這個對象的輸入輸出流
-寫入和讀取數據

Socket連接模型

Java后端開發中TCP通信傳輸協議怎么用

服務端和客戶端通過Socket進行連接,雖然是一個Socket,但是相當于把這一個Socket分成了兩個管道,服務端拿著這兩根管道的一段,客戶端拿著這兩根管道的另一端。

  • Server的input與Client的output相連

  • 客戶端發送數據,從Client的output發送,傳輸到Server的input接收

  • 服務端發送數據,從Server的output發送,傳輸到Client的input接收

  • 如果實現雙端收發通信,每個程序至少需要兩個線程

消息協議

TCP:面向連接
UDP:不需要建立連接 類似數據報

TCP:穩定,要求發送數據前必須確認雙方都可以收發消息
連接過程 : 三次握手
Server--------------------- Client

1: 監聽-----------------------發送請求
這步之后,服務端知道客戶端可以發數據
2:收到請求,應答------------收到應答消息,發送應答包給s
這步之后,客戶端知道服務端可收發數據
3:收到應答
這步之后,服務端知道客戶端可以收數據

傳輸過程中數據類型需要了解的細節

char:16bit 兩個字節Byte

數據發送的單位:數據每次發送一個byte,一個char需要發送兩次單字節

發送文字消息

  • 第一部分應發送字符串的長度,以便確定字節數組的長度

  • 對方,讀取的第一個字節是消息長度,定義一個固定容量大小的容器

  • 第二部分為消息內容

  • 對方,讀取對應長度的字節后,將其轉成對應的數據(String對象)

數據類型:

  • 整數型:byte short int long

  • 浮點型:float double

  • 字符型:char

  • 布爾型:boolean

  • char=16bit=2 byte unicode編碼

  • utf-8:1-6個字節組成一個漢字

1100 1101 1010

如這個數據第一個字節有兩個1,則代表它是一個漢子,并且后面兩個字節都表示這個漢字,如果有111就讀取后面三個字節
因為英文用ASCII碼存儲0-127,第一位不可能是1,通過第一個字節可以判斷是中文還是英文

  • 英文字母全部兼容:ASCII 0-127 二進制碼:0-255,所以0-127一定以0開頭,漢字是16bit 0-65536

TCP通信代碼

通過自己編寫一個客戶端和服務端,實現消息的首發,這里的核心主要是自己編寫通信協議,我在這里第一次發送到是數據的長度,并且做了數據加密,客戶端需要解析這個數據長度,并創建對應長度的數組,才能正確讀取消息內容
MsgClient

package com.lding.net;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

/**
 * @program: Net
 * @description: Tcp客戶端測試
 * @author: 王丁
 * @date: 2021-09-20 10:04
 **/
public class TcpClient {
    public static void main(String[] args) throws IOException {
        Socket socket=new Socket("127.0.0.1",8888);
        OutputStream output=socket.getOutputStream();
        InputStream input=socket.getInputStream();
        InputStreamReader inputStreamReader = new InputStreamReader(input);

//        byte[] msgbyte=new byte[30];
//        input.read(msgbyte);
//        System.out.println("服務器說:"+new String(msgbyte));

        int length2=input.read();
        int length3=input.read();
        int msglength=length3*3+length2;
        System.out.println("消息長度為:"+msglength);
        byte[] msgbytes=new byte[msglength];
        input.read(msgbytes);
        String getmsg=new String(msgbytes);
        System.out.println("服務器說:"+getmsg);

    }
}

MsgServer

package com.lding.net;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @program: Net
 * @description: Tcp服務端測試
 * @author: 王丁
 * @date: 2021-09-20 10:03
 **/
public class TcpServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8888);
        //監聽客戶端的Socket連接
        System.out.println("服務端開啟:ip:"+serverSocket.getInetAddress().getHostAddress()+"端口號:"+serverSocket.getLocalSocketAddress());
        System.out.println("正在等待有緣人......");
        Socket socketClient = serverSocket.accept();
        System.out.println("客戶端已連接:"+socketClient.getInetAddress());
        System.out.println("客戶端端口"+socketClient.getPort());

        OutputStream output=socketClient.getOutputStream();
        InputStream input=socketClient.getInputStream();

//        output.write("服務器連接成功!!!".getBytes());
//        output.flush();//刷新緩沖,管道強制刷出
        String msg="服務器連接成功!!!中秋快樂!<include/bits/stdc++.h> using namespace std";
        byte[] msgBytes=msg.getBytes();
        int length2=msgBytes.length%3;
        int length3=msgBytes.length/3;
        output.write(length2);
        output.write(length3);
        output.write(msgBytes);
        output.flush();
//        while(input.read()!=-1){
//            System.out.println((char) input.read());
//        }
    }
}

運行結果

Java后端開發中TCP通信傳輸協議怎么用

Java后端開發中TCP通信傳輸協議怎么用

還可以完善的地方

1、之后通信協議可以加入,通過客戶端列表,轉發消息內容到多個客戶端
2、攜帶用戶名、目標用戶名等等

關于“Java后端開發中TCP通信傳輸協議怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

赣榆县| 涿州市| 屏东县| 闻喜县| 兴国县| 丹阳市| 张掖市| 博白县| 都昌县| 石狮市| 新津县| 开封县| 襄垣县| 淮滨县| 石嘴山市| 舞阳县| 钦州市| 江津市| 元阳县| 乌鲁木齐市| 富平县| 临桂县| 旬阳县| 扶余县| 新龙县| 祥云县| 资中县| 彭山县| 竹山县| 松江区| 黄龙县| 沙坪坝区| 榆林市| 晋中市| 昌吉市| 安仁县| 绩溪县| 乌拉特前旗| 阿拉善盟| 介休市| 湖口县|