基于单线程下的服务端与客户端实现

    科技2022-08-16  114

    一、服务端

            服务端只需创建服务端Socket,并绑定端口号,使用accept()方法等待客户端连接,如果没有客户端连接,则一直阻塞,有客户端连接,返回客户端Socket对象(即客户端端口号)。接下来读取客户端输入信息,并向客户端输出信息。最后,关闭输入输出流。

    package com.bite; import java.io.IOException; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class SingleServer { public static void main(String[] args) throws Exception{ //服务器绑定端口号 ServerSocket serverSocket=new ServerSocket(666); try{ System.out.println("等待客户端连接"); //等待客户端连接,如果没有客户端连接,则一直阻塞,有客户端连接,返回客户端Socket对象 Socket client=serverSocket.accept(); System.out.println("有新的客户端连接,端口号为:"+client.getPort()); //获取客户端输入输出流 Scanner clientInput=new Scanner(client.getInputStream()); clientInput.useDelimiter("\n"); PrintStream clientOut=new PrintStream(client.getOutputStream(),true,"UTF-8"); //获取客户端输入 if(clientInput.hasNext()){ System.out.println(client.getInetAddress()+"说:"+clientInput.next()); } //向客户端输出 clientOut.println("hello ,I am a Server"); clientInput.close(); clientOut.close(); serverSocket.close(); }catch(IOException e){ System.out.println("服务器端通信出现异常"); } } }

    二、客户端

           创建客户端Socket连接服务器,绑定服务器地址和端口号。向服务器输出信息,读取服务器输入信息。最后关闭输入输出流。

    package com.bite; import java.io.IOException; import java.io.PrintStream; import java.net.Socket; import java.util.Scanner; public class SingleClient { public static void main(String[] args) throws Exception { String serverName="127.0.0.1"; Integer port=666; try{ //创建客户端Socket连接服务器 Socket client=new Socket(serverName,port); System.out.println("连接到服务器,服务器地址为:"+client.getInetAddress()); //获取输入输出流 PrintStream out=new PrintStream(client.getOutputStream(),true,"UTF-8"); Scanner in=new Scanner(client.getInputStream()); in.useDelimiter("\n"); //向服务器输出内容 out.println("hello I am a Client"); //读取服务器内容 if(in.hasNext()){ System.out.println("服务器发送消息为:"+in.next()); } in.close(); out.close(); client.close(); }catch(IOException e){ System.out.println("客户端通信出现了问题"); } } }

    以上实现简单的单线程服务器与客户端间的通信。

    Processed: 0.060, SQL: 9