• 简单的java socket 示例


    一、搭建服务器端

    a)、创建ServerSocket对象绑定监听端口。

    b)、通过accept()方法监听客户端的请求。

    c)、建立连接后,通过输入输出流读取客户端发送的请求信息。

    d)、通过输出流向客户端发送请求信息。

    e)、关闭相关资源。

    复制代码
     1 package socket;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.IOException;
     5 import java.io.InputStreamReader;
     6 import java.io.PrintWriter;
     7 import java.net.ServerSocket;
     8 import java.net.Socket;
     9 
    10 public class SocketService {
    11     //搭建服务器端
    12     public static void main(String[] args) throws IOException{
    13         SocketService socketService = new SocketService();
    14         //1、a)创建一个服务器端Socket,即SocketService 
    15         socketService.oneServer();
    16     }
    17     public  void oneServer(){
    18         try{
    19             ServerSocket server=null;
    20             try{
    21                 server=new ServerSocket(5209);
    22                 //b)指定绑定的端口,并监听此端口。
    23                 System.out.println("服务器启动成功");
    24                 //创建一个ServerSocket在端口5209监听客户请求
    25             }catch(Exception e) {
    26                     System.out.println("没有启动监听:"+e);
    27                     //出错,打印出错信息
    28             }
    29             Socket socket=null;
    30             try{
    31                 socket=server.accept();
    32                 //2、调用accept()方法开始监听,等待客户端的连接 
    33                 //使用accept()阻塞等待客户请求,有客户
    34                 //请求到来则产生一个Socket对象,并继续执行
    35             }catch(Exception e) {
    36                 System.out.println("Error."+e);
    37                 //出错,打印出错信息
    38             }
    39             //3、获取输入流,并读取客户端信息 
    40             String line;
    41             BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
    42             //由Socket对象得到输入流,并构造相应的BufferedReader对象
    43             PrintWriter writer=new PrintWriter(socket.getOutputStream());
    44             //由Socket对象得到输出流,并构造PrintWriter对象
    45             BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    46             //由系统标准输入设备构造BufferedReader对象
    47             System.out.println("Client:"+in.readLine());
    48             //在标准输出上打印从客户端读入的字符串
    49             line=br.readLine();
    50             //从标准输入读入一字符串
    51             //4、获取输出流,响应客户端的请求 
    52             while(!line.equals("end")){
    53             //如果该字符串为 "bye",则停止循环
    54                 writer.println(line);
    55                 //向客户端输出该字符串
    56                 writer.flush();
    57                 //刷新输出流,使Client马上收到该字符串
    58                 System.out.println("Server:"+line);
    59                 //在系统标准输出上打印读入的字符串
    60                 System.out.println("Client:"+in.readLine());
    61                 //从Client读入一字符串,并打印到标准输出上
    62                 line=br.readLine();
    63                 //从系统标准输入读入一字符串
    64             } //继续循环
    65 
    66             //5、关闭资源 
    67             writer.close(); //关闭Socket输出流
    68             in.close(); //关闭Socket输入流
    69             socket.close(); //关闭Socket
    70             server.close(); //关闭ServerSocket
    71         }catch(Exception e) {//出错,打印出错信息
    72             System.out.println("Error."+e);
    73         }
    74     }
    75 }
    复制代码

    二、搭建客户器端

    a)、创建Socket对象,指明需要连接的服务器的地址和端口。

    b)、建立连接后,通过输出流向服务器发送请求信息。

    c)、通过输入流获取服务器的响应信息。

    d)、关闭响应资源

    复制代码
     1 package socket;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.IOException;
     5 import java.io.InputStream;
     6 import java.io.InputStreamReader;
     7 import java.io.PrintWriter;
     8 import java.net.InetAddress;
     9 import java.net.Socket;
    10 import java.net.URL;
    11 
    12 public class SocketClient {
    13     // 搭建客户端
    14     public static void main(String[] args) throws IOException {
    15         try {
    45             // 1、创建客户端Socket,指定服务器地址和端口
    46             // Socket socket=new Socket("127.0.0.1",5200);
    47             Socket socket = new Socket("192.168.1.115", 5209);
    48             System.out.println("客户端启动成功");
    49             // 2、获取输出流,向服务器端发送信息
    50             // 向本机的52000端口发出客户请求
    51             BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    52             // 由系统标准输入设备构造BufferedReader对象
    53             PrintWriter write = new PrintWriter(socket.getOutputStream());
    54             // 由Socket对象得到输出流,并构造PrintWriter对象
    55             //3、获取输入流,并读取服务器端的响应信息 
    56             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    57             // 由Socket对象得到输入流,并构造相应的BufferedReader对象
    58             String readline;
    59             readline = br.readLine(); // 从系统标准输入读入一字符串
    60             while (!readline.equals("end")) {
    61                 // 若从标准输入读入的字符串为 "end"则停止循环
    62                 write.println(readline);
    63                 // 将从系统标准输入读入的字符串输出到Server
    64                 write.flush();
    65                 // 刷新输出流,使Server马上收到该字符串
    66                 System.out.println("Client:" + readline);
    67                 // 在系统标准输出上打印读入的字符串
    68                 System.out.println("Server:" + in.readLine());
    69                 // 从Server读入一字符串,并打印到标准输出上
    70                 readline = br.readLine(); // 从系统标准输入读入一字符串
    71             } // 继续循环
    72             //4、关闭资源 
    73             write.close(); // 关闭Socket输出流
    74             in.close(); // 关闭Socket输入流
    75             socket.close(); // 关闭Socket
    76         } catch (Exception e) {
    77             System.out.println("can not listen to:" + e);// 出错,打印出错信息
    78         }
    79     }
    80 
    81 }
    复制代码

    这是我们先启动服务器端,再启动客户端(顺序不能乱)

     

    原文出处:

    [1] Clown, 简单的java socket 示例, https://www.cnblogs.com/zhoudi/p/6025552.html

  • 相关阅读:
    docker搭建redis集群
    navicat 连接mysql报错
    ld: cannot find lstdc++ ld: cannot find lgcc_s
    The CXX compiler identification is unknown
    Redirecting to /bin/systemctl start docker.service Job for docker.service
    error while loading shared libraries: libiomp5.so: wrong ELF class: ELFCLASS
    新的centos8服务器安装docker报这个问题failure: repodata/repomd.xml from download.docker.com_linux_centos_dockerce.repoyumconfigmanager: [Errno 256] No more mirrors to try https://download.docker....
    java截取http斜杆之间的数据
    linux下解压jar文件
    win10注册表各种配置
  • 原文地址:https://www.cnblogs.com/ryelqy/p/10104101.html
Copyright © 2020-2023  润新知