TCP

2019-07-09 22:33 更新

TCP實現(xiàn)服務(wù)端和客戶端簡單的通訊: 服務(wù)端接收到客戶端的連接后向客戶端發(fā)送字符串,客戶端接收字符串并打印。

1.http是應(yīng)用層協(xié)議,其底層傳輸協(xié)議是tcp協(xié)議,因此tcp服務(wù)端可以通過瀏覽器訪問。但如果使用瀏覽器訪問服務(wù)器http://localhost:8888時,會發(fā)生錯誤,這是因為http包裝了TCP協(xié)議。
2.與UDP不同的是客戶端使用的端口系統(tǒng)自動分配。
3.Socket是服務(wù)端和客戶端建立的管道,可以將管道看成中介者,服務(wù)端和客戶端都是和中介者打交道,不直接和對方打交道,這樣實現(xiàn)了訪問方式的統(tǒng)一。

1.服務(wù)端:

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;


/**
 * 1.創(chuàng)建服務(wù)器  指定端口new ServerSocket(int port)
 * 2.接受客戶端連接  阻塞式
 * 3.發(fā)送數(shù)據(jù)
 */
public class MyServer {
    public static void main(String[] args) throws IOException {
        //1.創(chuàng)建服務(wù)器  指定端口new ServerSocket(int port)
        ServerSocket server = new ServerSocket(8888);
        //2.接受客戶端連接  阻塞式
        Socket socket = server.accept();
        System.out.println("一個客戶建立連接。");
        //3.發(fā)送數(shù)據(jù)
        /*BufferedWriter bWriter = new BufferedWriter(
                new OutputStreamWriter(socket.getOutputStream()));
        bWriter.write("hello你好!");
        bWriter.newLine();
        bWriter.flush();*/
        //另一種方式發(fā)送數(shù)據(jù):
        DataOutputStream dStream = new DataOutputStream(socket.getOutputStream());
        dStream.writeUTF("hello你好!");
        dStream.flush();
        //4.關(guān)閉
//      bWriter.close();
        dStream.close();
        socket.close();
        server.close();
    }
}

2.客戶端:

import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
/**
 * 1.創(chuàng)建客戶端  必須指定服務(wù)器+端口  此時就會連接
 * 2.讀取數(shù)據(jù)
 */
public class MyClient {
    public static void main(String[] args) throws IOException {
        //1.創(chuàng)建客戶端  必須指定服務(wù)器+端口  此時就會連接
        Socket client = new Socket("localhost", 8888);
        //2.讀取數(shù)據(jù)
        /*BufferedReader bReader = new BufferedReader(
                new InputStreamReader(client.getInputStream()));
        //注意:bReader.readLine()需要行的結(jié)束符,如:"\r\n",
        //也可以通過bWriter.newLine();創(chuàng)建行的結(jié)束符。
        System.out.println(bReader.readLine());*/
        //另一種讀取數(shù)據(jù)方式:
        DataInputStream dStream = new DataInputStream(client.getInputStream());
        System.out.println(dStream.readUTF());
        //3.關(guān)閉
//      bReader.close();
        dStream.close();
        client.close();
    }
}
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號