socket02 ServerSocket 服务端与客户端连接

2023-10-20 10:13:31 浏览数 (3)

ServerSocket 服务端

是运行的服务端的ServerSocket。socket方式是点对点的属于TCP。

建立服务端频骤

  1. 建立端口并指定服务器IP
  2. 使用 accpet 方法接收连接,阻塞式方法
  3. 使用流通信

代码实现

  1. 建立服务器,建立通道对象
  2. 接收数据
  3. 发送数据
  4. 阻塞式的意思是,如果没有连接,就会一直等待。所以在while里面是一直处于等待状态。
代码语言:javascript复制
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer {
  public static void main(String[] args) throws IOException, IOException {
    //1.创建服务器套接字
    ServerSocket serverSocket = new ServerSocket(8888);
    BufferedWriter bf = null;
    Socket socket = null;
    DataInputStream date = null;

    String welcome = "欢迎使用我的宇宙无敌服务器";

    while(true){
      //2.建立连接,这只是建立连接,并不是接收客户端发来的信息,就像按电话的接听键
      socket = serverSocket.accept(); // 阻塞式的接收方式
      System.out.println("Server: "   welcome);

      //3.逐行写出给客户端
      bf = new BufferedWriter(new OutputStreamWriter(
              socket.getOutputStream() // 从socket中获取数据
      ));
      bf.append(welcome);
      bf.newLine(); // 一定要换行,相当于rn
      bf.flush();

      //4.接收客户端发来的信息
      date = new DataInputStream(socket.getInputStream());
      String message = date.readUTF();
      System.out.println(message);

    }
  }
}

Soket客户端

可以用来连接服务器

连接步骤

  1. 建立连接
  2. 使用I/O 学节流进行交互
代码实现
代码语言:javascript复制

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;


public class SocketClient {
  public static void main(String[] args) throws IOException {
    //1.建立服务器连接
    Socket client = new Socket("localhost", 8888);

    //2.获取服务器传来的数据
    BufferedReader bf = new BufferedReader(
            new InputStreamReader(
                    client.getInputStream()
            ));
    //阻塞式
    String getMessage = bf.readLine();
    System.out.println(getMessage);

    //3.客户端向服务器发送
    DataOutputStream ds = new DataOutputStream(client.getOutputStream());
    ds.writeUTF("client: 获取到了服务器连接");
    ds.flush();
    ds.close();
  }
}

0 人点赞