欢迎访问宙启技术站
智能推送

Java中的Socket函数及其用法

发布时间:2023-06-25 12:26:27

Java提供了Socket类和ServerSocket类来实现网络编程。Socket是一个和网络中的通信端点有关的类。在网络中,每个主机有一个IP地址和一个端口号,如果两个主机之间要进行通信,就需要建立一条连接,通信的两端就是一个套接字或Socket。Socket可以用来建立不同层次的协议,如TCP、UDP等。Java中的Socket类和ServerSocket类可以使用TCP协议来建立连接和传输数据。

Socket类的用法:

1. 创建Socket对象:Socket socket = new Socket(String host, int port)

2. 获取输入流和输出流:

- 输入流:socket.getInputStream()

- 输出流:socket.getOutputStream()

3. 传输数据:

- 发送数据:OutputStream.write(byte[] b), OutputStream.write(int b)

- 接收数据:InputStream.read(byte[] b), InputStream.read()

4. 关闭socket:socket.close()

ServerSocket类的用法:

1. 创建ServerSocket对象:ServerSocket ss = new ServerSocket(int port)

2. 等待客户端连接:Socket socket = ss.accept()

3. 获取输入流和输出流:

- 输入流:socket.getInputStream()

- 输出流:socket.getOutputStream()

4. 传输数据:

- 发送数据:OutputStream.write(byte[] b), OutputStream.write(int b)

- 接收数据:InputStream.read(byte[] b), InputStream.read()

5. 关闭socket:socket.close()

6. 关闭ServerSocket:ss.close()

Socket程序示例:

客户端程序:

import java.net.*;

import java.io.*;

public class MyClient {

    public static void main(String[] args) {

        try {

            Socket socket = new Socket("127.0.0.1", 8888);

            OutputStream os = socket.getOutputStream();

            os.write("Hello World".getBytes());

            InputStream is = socket.getInputStream();

            byte[] buffer = new byte[1024];

            int len;

            len = is.read(buffer);

            System.out.println("接收到服务器的响应:" + new String(buffer, 0, len));

            is.close();

            os.close();

            socket.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

服务端程序:

import java.net.*;

import java.io.*;

public class MyServer {

    public static void main(String[] args) {

        try {

            ServerSocket ss = new ServerSocket(8888);

            Socket socket = ss.accept();

            InputStream is = socket.getInputStream();

            byte[] buffer = new byte[1024];

            int len;

            len = is.read(buffer);

            System.out.println("接收到客户端的数据:" + new String(buffer, 0, len));

            OutputStream os = socket.getOutputStream();

            os.write("OK".getBytes());

            os.close();

            is.close();

            socket.close();

            ss.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

运行结果:

服务端输出:

接收到客户端的数据:Hello World

客户端输出:

接收到服务器的响应:OK