Socket

Java網(wǎng)絡(luò)編程

InetAddress對(duì)象的常見(jiàn)使用方法

//獲取本機(jī)的InetAddress對(duì)象
InetAddress localhost = InetAddress.getLocalHost();
System.out.println(localhost);

//根據(jù)指定的主機(jī)名獲取InetAddres對(duì)象
InetAddress host = InetAddress.getByName("LAPTOP-9C26JBRD");
System.out.println(host);

//根據(jù)域名返回InetAddres對(duì)象,比如www.baidu.com
InetAddress hostBaidu = InetAddress.getByName("www.baidu.com");
System.out.println(hostBaidu);

//通過(guò) InetAddress對(duì)象獲取對(duì)應(yīng)地址
String hostAddress = hostBaidu.getHostAddress();
System.out.println(hostAddress);

//通過(guò) InetAddress對(duì)象獲取對(duì)應(yīng)域名或者主機(jī)名
String hostName = hostBaidu.getHostName();
System.out.println(hostName);

//結(jié)果
LAPTOP-9C26JBRD/192.168.23.1
LAPTOP-9C26JBRD/192.168.23.1
www.baidu.com/14.215.177.38
14.215.177.38
www.baidu.com

Socket

客戶端:

當(dāng)我們需要通訊時(shí)(讀寫(xiě)數(shù)據(jù))

1.socket.getOutputStream()

2.socket.getInputStream()

服務(wù)端:

當(dāng)我們需要通訊時(shí)(讀寫(xiě)數(shù)據(jù))

1.socket.getOutputStream()

2.socket.getInputStream()

客戶端和服務(wù)器端通常情況下,是在不同主機(jī)的

TCP應(yīng)用案例1

1.編寫(xiě)一個(gè)服務(wù)器端和客戶端

2.服務(wù)器端在9999端口監(jiān)聽(tīng)

3.客戶端連接到服務(wù)器端,發(fā)送“hello,server”,然后退出

4.服務(wù)器端接收到客戶端發(fā)送的信息,輸出,并退出

服務(wù)器端

package com.zz.socket.server;

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

/**
 * @Projectname: socket
 * @Filename: SocketTcpServer
 * @Author: wyf
 * @Data: 2022/12/1 10:51
 * @Description: TODO
 */
public class SocketTcpServer {
    public static void main(String[] args) throws IOException {
        //1.在9999端口監(jiān)聽(tīng),等待連接
        //要求沒(méi)有其他服務(wù)監(jiān)聽(tīng)9999
        //serverSocket可以返回多個(gè)socket
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("服務(wù)端,在9999端口監(jiān)聽(tīng),等待連接");
        //2.當(dāng)客戶端沒(méi)有連接9999端口時(shí),程序會(huì)阻塞,等待連接
        //如果有客戶端連接,則會(huì)返回socket對(duì)象
        Socket socket = serverSocket.accept();

        System.out.println("服務(wù)器端:socket="+socket.getClass());
        //3.通過(guò)socket.getInputStream()讀取客戶端寫(xiě)入到數(shù)據(jù)通道的數(shù)據(jù)顯示
        InputStream inputStream = socket.getInputStream();
        //4.Io讀取
        byte[] bytes = new byte[1024];
        int readLen = 0;
        while ((readLen = inputStream.read(bytes)) != -1){
            System.out.println(new String(bytes, 0, readLen));
        }
        //5.關(guān)閉相關(guān)流
        inputStream.close();
        socket.close();
        serverSocket.close();
    }
}

客戶端

package com.zz.socket.client;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * @Projectname: socket
 * @Filename: SocketTcpClient
 * @Author: wyf
 * @Data: 2022/12/1 10:58
 * @Description: TODO
 */
public class SocketTcpClient {
    public static void main(String[] args) throws IOException {
        //1.連接服務(wù)端
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
        System.out.println("客戶端:socket="+socket.getClass());
        //2.連接上后生成socket,通過(guò)socket.getOutputStream()
        OutputStream outputStream = socket.getOutputStream();
        //3.通過(guò)輸出流,寫(xiě)入數(shù)據(jù)到數(shù)據(jù)通道
        outputStream.write("hello server".getBytes());
        //4.關(guān)閉流對(duì)象和socket
        outputStream.close();
        socket.close();
    }
}

TCP應(yīng)用案例2

1.編寫(xiě)一個(gè)服務(wù)器端和客戶端

2.服務(wù)器端在9999端口監(jiān)聽(tīng)

3.客戶端連接到服務(wù)器端,發(fā)送“hello,server”

4.服務(wù)器端接收到客戶端發(fā)送的信息,輸出,然后發(fā)送“hello client”并退出

5.客戶端接收服務(wù)器端發(fā)送的數(shù)據(jù),輸出,并退出

服務(wù)器端

package com.zz.socket.server;


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

/**
 * @Projectname: socket
 * @Filename: SocketTcpServer02
 * @Author: wyf
 * @Data: 2022/12/1 11:21
 * @Description: TODO
 */
public class SocketTcpServer02 {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("正在監(jiān)聽(tīng)9999端口");
        Socket socket = serverSocket.accept();

        InputStream inputStream = socket.getInputStream();

        byte[] bytes = new byte[1024];
        int readLen = 0;
        while ((readLen = inputStream.read(bytes)) != -1){
            System.out.println(new String(bytes, 0, readLen));
        }

        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("hello client!".getBytes());
        //寫(xiě)入結(jié)束標(biāo)記
        socket.shutdownOutput();

        serverSocket.close();
        socket.close();
        inputStream.close();
        outputStream.close();
    }
}

客戶端

package com.zz.socket.client;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * @Projectname: socket
 * @Filename: SocketTcpClient02
 * @Author: wyf
 * @Data: 2022/12/1 11:21
 * @Description: TODO
 */
public class SocketTcpClient02 {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
        System.out.println("客戶端開(kāi)始連接!");

        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("hello server".getBytes());
        //寫(xiě)入結(jié)束標(biāo)記
        socket.shutdownOutput();

        InputStream inputStream = socket.getInputStream();
        byte[] bytes = new byte[1024];
        int readLen = 0;

        while ((readLen = inputStream.read(bytes)) != -1){
            System.out.println(new String(bytes,0,readLen));
        }

    }
}

使用字符流實(shí)現(xiàn)應(yīng)用案例2

服務(wù)器端

package com.zz.socket.server;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @Projectname: socket
 * @Filename: SocketTcpServer
 * @Author: wyf
 * @Data: 2022/12/1 10:51
 * @Description: TODO
 */
public class SocketTcpServer03 {
    public static void main(String[] args) throws IOException {
        //1.在9999端口監(jiān)聽(tīng),等待連接
        //要求沒(méi)有其他服務(wù)監(jiān)聽(tīng)9999
        //serverSocket可以返回多個(gè)socket
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("服務(wù)端,在9999端口監(jiān)聽(tīng),等待連接");
        //2.當(dāng)客戶端沒(méi)有連接9999端口時(shí),程序會(huì)阻塞,等待連接
        //如果有客戶端連接,則會(huì)返回socket對(duì)象
        Socket socket = serverSocket.accept();
        System.out.println("服務(wù)器端:socket="+socket.getClass());
        //3.通過(guò)socket.getInputStream()讀取客戶端寫(xiě)入到數(shù)據(jù)通道的數(shù)據(jù)顯示
        InputStream inputStream = socket.getInputStream();
        //4.Io讀取
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String s = bufferedReader.readLine();
        System.out.println(s);

        OutputStream outputStream = socket.getOutputStream();
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
        bufferedWriter.write("hello client");
        bufferedWriter.newLine();
        bufferedWriter.flush();

        //5.關(guān)閉相關(guān)流

        bufferedWriter.close();
        bufferedReader.close();
        socket.close();
        serverSocket.close();
    }
}

客戶端

package com.zz.socket.client;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;

/**
 * @Projectname: socket
 * @Filename: SocketTcpClient
 * @Author: wyf
 * @Data: 2022/12/1 10:58
 * @Description: TODO
 */
public class SocketTcpClient03 {
    public static void main(String[] args) throws IOException {
        //1.連接服務(wù)端
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
        System.out.println("客戶端:socket="+socket.getClass());
        //2.連接上后生成socket,通過(guò)socket.getOutputStream()
        OutputStream outputStream = socket.getOutputStream();
        //3.通過(guò)輸出流,寫(xiě)入數(shù)據(jù)到數(shù)據(jù)通道
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
        bufferedWriter.write("hello server!");
        //寫(xiě)入結(jié)束標(biāo)記
        bufferedWriter.newLine();
        bufferedWriter.flush();


        InputStream inputStream = socket.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String s = bufferedReader.readLine();
        System.out.println(s);
        //4.關(guān)閉流對(duì)象和socket
        bufferedReader.close();
        bufferedWriter.close();
        socket.close();
    }
}

讀取文件

服務(wù)端

package com.zz.socket.upload;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @Projectname: socket
 * @Filename: UploadServer
 * @Author: wyf
 * @Data: 2022/12/1 14:02
 * @Description: TODO
 */
public class UploadServer {
    public static void main(String[] args) throws IOException {
        //開(kāi)啟服務(wù)監(jiān)聽(tīng)
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("開(kāi)始監(jiān)聽(tīng)9999端口號(hào)");
        Socket socket = serverSocket.accept();

        InputStream inputStream = socket.getInputStream();
        BufferedInputStream bis = new BufferedInputStream(inputStream);
        byte[] bytes = new byte[1024];
        ByteArrayOutputStream bao = new ByteArrayOutputStream();
        int readLen = 0;
        while ((readLen = bis.read(bytes)) != -1){
            bao.write(bytes, 0, readLen);
        }
        byte[] bytes1 = bao.toByteArray();

        String path = "src\\idea.png";
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path));
        bos.write(bytes1);
        bos.close();
        bis.close();
        serverSocket.close();
        socket.close();
    }
}

客戶端

package com.zz.socket.upload;

import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * @Projectname: socket
 * @Filename: UploadClient
 * @Author: wyf
 * @Data: 2022/12/1 14:02
 * @Description: TODO
 */
public class UploadClient {
    public static void main(String[] args) throws IOException {
        //連接服務(wù)器端
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
        System.out.println("連接了服務(wù)器端!");
        String path = "e:\\image\\idea.png";
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));
        byte[] bytes = new byte[1024];
        ByteArrayOutputStream bao = new ByteArrayOutputStream();
        int readLen = 0;
        while ((readLen = bis.read(bytes)) != -1){
            bao.write(bytes, 0, readLen);
        }
        byte[] bytes1 = bao.toByteArray();
        OutputStream outputStream = socket.getOutputStream();
        BufferedOutputStream bos = new BufferedOutputStream(outputStream);
        bos.write(bytes1);
        bos.flush();
        bis.close();
        socket.shutdownOutput();

        bos.close();
        socket.close();
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容