Socket

Java网络编程

InetAddress对象的常见使用方法

//获取本机的InetAddress对象
InetAddress localhost = InetAddress.getLocalHost();
System.out.println(localhost);

//根据指定的主机名获取InetAddres对象
InetAddress host = InetAddress.getByName("LAPTOP-9C26JBRD");
System.out.println(host);

//根据域名返回InetAddres对象,比如www.baidu.com
InetAddress hostBaidu = InetAddress.getByName("www.baidu.com");
System.out.println(hostBaidu);

//通过 InetAddress对象获取对应地址
String hostAddress = hostBaidu.getHostAddress();
System.out.println(hostAddress);

//通过 InetAddress对象获取对应域名或者主机名
String hostName = hostBaidu.getHostName();
System.out.println(hostName);

//结果
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

客户端:

当我们需要通讯时(读写数据)

1.socket.getOutputStream()

2.socket.getInputStream()

服务端:

当我们需要通讯时(读写数据)

1.socket.getOutputStream()

2.socket.getInputStream()

客户端和服务器端通常情况下,是在不同主机的

TCP应用案例1

1.编写一个服务器端和客户端

2.服务器端在9999端口监听

3.客户端连接到服务器端,发送“hello,server”,然后退出

4.服务器端接收到客户端发送的信息,输出,并退出

服务器端

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端口监听,等待连接
        //要求没有其他服务监听9999
        //serverSocket可以返回多个socket
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("服务端,在9999端口监听,等待连接");
        //2.当客户端没有连接9999端口时,程序会阻塞,等待连接
        //如果有客户端连接,则会返回socket对象
        Socket socket = serverSocket.accept();

        System.out.println("服务器端:socket="+socket.getClass());
        //3.通过socket.getInputStream()读取客户端写入到数据通道的数据显示
        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.关闭相关流
        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.连接服务端
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
        System.out.println("客户端:socket="+socket.getClass());
        //2.连接上后生成socket,通过socket.getOutputStream()
        OutputStream outputStream = socket.getOutputStream();
        //3.通过输出流,写入数据到数据通道
        outputStream.write("hello server".getBytes());
        //4.关闭流对象和socket
        outputStream.close();
        socket.close();
    }
}

TCP应用案例2

1.编写一个服务器端和客户端

2.服务器端在9999端口监听

3.客户端连接到服务器端,发送“hello,server”

4.服务器端接收到客户端发送的信息,输出,然后发送“hello client”并退出

5.客户端接收服务器端发送的数据,输出,并退出

服务器端

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("正在监听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());
        //写入结束标记
        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("客户端开始连接!");

        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("hello server".getBytes());
        //写入结束标记
        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));
        }

    }
}

使用字符流实现应用案例2

服务器端

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端口监听,等待连接
        //要求没有其他服务监听9999
        //serverSocket可以返回多个socket
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("服务端,在9999端口监听,等待连接");
        //2.当客户端没有连接9999端口时,程序会阻塞,等待连接
        //如果有客户端连接,则会返回socket对象
        Socket socket = serverSocket.accept();
        System.out.println("服务器端:socket="+socket.getClass());
        //3.通过socket.getInputStream()读取客户端写入到数据通道的数据显示
        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.关闭相关流

        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.连接服务端
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
        System.out.println("客户端:socket="+socket.getClass());
        //2.连接上后生成socket,通过socket.getOutputStream()
        OutputStream outputStream = socket.getOutputStream();
        //3.通过输出流,写入数据到数据通道
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
        bufferedWriter.write("hello server!");
        //写入结束标记
        bufferedWriter.newLine();
        bufferedWriter.flush();


        InputStream inputStream = socket.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String s = bufferedReader.readLine();
        System.out.println(s);
        //4.关闭流对象和socket
        bufferedReader.close();
        bufferedWriter.close();
        socket.close();
    }
}

读取文件

服务端

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 {
        //开启服务监听
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("开始监听9999端口号");
        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 {
        //连接服务器端
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
        System.out.println("连接了服务器端!");
        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();
    }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容