TCP

2019-07-09 22:33 更新

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

1.http是應(yīng)用層協(xié)議,其底層傳輸協(xié)議是tcp協(xié)議,因此tcp服務(wù)端可以通過(guò)瀏覽器訪問(wèn)。但如果使用瀏覽器訪問(wèn)服務(wù)器http://localhost:8888時(shí),會(huì)發(fā)生錯(cuò)誤,這是因?yàn)閔ttp包裝了TCP協(xié)議。
2.與UDP不同的是客戶(hù)端使用的端口系統(tǒng)自動(dòng)分配。
3.Socket是服務(wù)端和客戶(hù)端建立的管道,可以將管道看成中介者,服務(wù)端和客戶(hù)端都是和中介者打交道,不直接和對(duì)方打交道,這樣實(shí)現(xiàn)了訪問(wè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.接受客戶(hù)端連接  阻塞式
 * 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.接受客戶(hù)端連接  阻塞式
        Socket socket = server.accept();
        System.out.println("一個(gè)客戶(hù)建立連接。");
        //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.客戶(hù)端:

import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
/**
 * 1.創(chuàng)建客戶(hù)端  必須指定服務(wù)器+端口  此時(shí)就會(huì)連接
 * 2.讀取數(shù)據(jù)
 */
public class MyClient {
    public static void main(String[] args) throws IOException {
        //1.創(chuàng)建客戶(hù)端  必須指定服務(wù)器+端口  此時(shí)就會(huì)連接
        Socket client = new Socket("localhost", 8888);
        //2.讀取數(shù)據(jù)
        /*BufferedReader bReader = new BufferedReader(
                new InputStreamReader(client.getInputStream()));
        //注意:bReader.readLine()需要行的結(jié)束符,如:"\r\n",
        //也可以通過(guò)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)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)