写点什么

Socket 和 ServerSocket 的简单介绍及例子,mybatis 源码面试题

用户头像
极客good
关注
发布于: 刚刚

二、ServerSocket 类




Socket 类代表一个客户端套接字,即任何时候连接到一个远程服务器应用时构建所需的 socket。现在,要实现一个服务器应用,需要不同的做法。服务器需随时待命,因为不知道客户端什么时候会发来请求,此时,我们需要使用 ServerSocket,对应的是 java.net.ServerSocket 类。?


ServerSocket 与 Socket 不同,ServerSocket 是等待客户端的请求,一旦获得一个连接请求,就创建一个 Socket 示例来与客户端进行通信。?


ServerSocket 的构造函数也有多种重载形式:?



ServerSocket 有一个不带参数的默认构造方法。通过该方法创建的 ServerSocket 不与任何端口绑定,接下来还需要通过 bind()方法与特定端口绑定。这个默认构造方法的用途是,允许服务器在绑定到特定端口之前,先设置 ServerSocket 的一些选项。因为一旦服务器与特定端口绑定,有些选项就不能再改变了。


例如


ServerSocket serverSocket=new ServerSocket();


serverSocket.setReuseAddress(true); //设置 ServerSocket 的选项


serverSocket.bind(new InetSocketAddress(8080)); //与 8080 端口绑定


把以上程序改成


ServerSocket serverSocket=new ServerSocket(8080);


serverSocket.setReuseAddress(true); //设置 ServerSocket 的选项


那 么 serverSocket.setReuseAddress(true) 方 法 就 不 起 任何作用了?


我们也可以使用如下构造函数创建一个 ServerSocket 实例


ServerSocket serverSocket = new ServerSocket(port,3);


把连接请求队列的长度设为 3。这意味着当队列中有了 3 个连接请求时,如果 Client 再请求连接,就会被 Server 拒绝,因为服务器队列已经满了。我们使用的 serverSocket.accept()方法就是从队列中取出连接请求。?


总之,?客户端向服务器发送请求可分为以下步骤:?


  1. 创建一个 Socket 实例?

  2. 利用 I/O 流与服务器进行通信?

  3. 关闭 socket?


服务器接收客户端请求步骤:?


  1. 创建一个 ServerSocket 实例,监听客户端发来的请求。?

  2. 与客户端获取连接后,创建一个 Socket 实例,利用 I/O 流与客户端进行通信,完毕后关闭 Socket。


当然,服务器可以接收多个客户端的请求,所以如果服务器是一个一个顺序相应肯定会带来不好的体


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


验,因此使用多线程来为多个客户端提供服务。


三、代码实例



1、Client 代码

package com.zhoufenqin.socket.client;


import java.io.BufferedReader;


import java.io.IOException;


import java.io.InputStreamReader;


import java.io.PrintStream;


import java.net.Socket;


public class Client {


public static final int port = 8080;


public static final String host = "localhost";


public static void main(String[] args) {


System.out.println("Client Start...");


while (true) {


Socket socket = null;


try {


//创建一个流套接字并将其连接到指定主机上的指定端口号


socket = new Socket(host,port);


//读取服务器端数据


BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));


//向服务器端发送数据


PrintStream out = new PrintStream(socket.getOutputStream());


System.out.print("请输入: \t");


String str = new BufferedReader(new InputStreamReader(System.in)).readLine();


out.println(str);


String ret = input.readLine();


System.out.println("服务器端返回过来的是: " + ret);


// 如接收到 "OK" 则断开连接


if ("OK".equals(ret)) {


System.out.println("客户端将关闭连接");


Thread.sleep(500);


break;


}


out.close();


input.close();


} catch (Exception e) {


System.out.println("客户端异常:" + e.getMessage());


} finally {


if (socket != null) {


try {


socket.close();


} catch (IOException e) {


socket = null;


System.out.println("客户端 finally 异常:" + e.getMessage());


}


}


}


}


}


}

2、Server 代码

package com.zhoufenqin.socket.server;


import java.io.BufferedReader;


import java.io.InputStreamReader;


import java.io.PrintStream;


import java.net.ServerSocket;


import java.net.Socket;


public class Server {


public static final int port = 8080;//监听的端口号


public static void main(String[] args) {


System.out.println("Server...\n");


Server server = new Server();


server.init();


}


public void init() {

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
Socket和ServerSocket的简单介绍及例子,mybatis源码面试题