Java网络编程:实战Scoket与ServerSocket

本文主要介绍了Java网络编程中的Socket和ServerSocket的使用,包括ServerSocket的实战应用,Socket的实战,以及如何运行一个简单的服务器客户端实例,详细阐述了从连接建立到数据交换的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java网络编程:实战Scoket与ServerSocket

一、Scoket与ServerSocket

java中使用网络编程的话可以使用Scoket或者是ServerSocket

  • ServerSocket.class是用来代表服务器端的Socket,需要bind绑定端口阻塞式调用accpet函数,等待客户端来建设连接,
  • Scoket.class是用来代表客户端的Socket,可以要求与服务器要求进行连接connect,当连接成功的时候服务器端accpet函数会返回一个Socket对象,这个Socket就是服务器进程可以与客户端进程进行数据交流的端点

在这里插入图片描述

二、ServerSocket实战
public class Server {
    public static void main(String[] args){
        //使用8888做为监听端口
        final int DEFAULT_PORT = 8888;
        //服务器端使用ServerSocket
        ServerSocket serverSocket = null;
        try {
            //bind绑定监听端口
            serverSocket = new ServerSocket(DEFAULT_PORT);
            System.out.println("启动服务器,监听端口:"+DEFAULT_PORT);
            //等待连接
            while(true){
                //阻塞式调用accept
                Socket socket = serverSocket.accept();
                System.out.println("客户端Port:"+socket.getPort()+"连接完成");
                //数据交换
                //输入流,装饰器模式
                BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                //输出流
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                //读取客户端发送的消息,客户端socket出错的话返回null
                String msg = reader.readLine();
                if(msg!=null){
                    System.out.println("客户端Port:"+socket.getPort()+"发送的消息式:"+msg);
                    //回复客户端
                    writer.write("服务器发送消息:"+msg+"\n");
                    writer.flush();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(serverSocket != null){
                try{
                    serverSocket.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

三、Socket实战
public class Client {
    public static void main(String[] args){
        final String DEFAULT_SERVER_HOST = "127.0.0.1";
        final int DEFAULT_SERVER_PORT = 8888;
        Socket socket = null;
        BufferedWriter writer = null;
        try {
            //创建socket
            socket = new Socket(DEFAULT_SERVER_HOST,DEFAULT_SERVER_PORT);
            //创建IO流
            //读取服务器端发送的内容
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //客户端发送信息给服务端
            writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            //等待用户输入信息
            BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
            String input = consoleReader.readLine();
            //发送给服务器
            writer.write(input+"\n");
            writer.flush();
            //读取服务器返回的消息
            String msg = reader.readLine();
            System.out.println(msg);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //关闭最外层的BufferedWriter,会自动清空缓冲区,也会关闭Socket
            if(writer != null){
                try {
                    writer.close();
                    System.out.println("关闭客户端Socket");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

四、运行简单的服务器客户端实例
4.1 编译
C:\Users\JessicaMaos>javac -encoding UTF-8  F:\untitled\src\Server.java

C:\Users\JessicaMaos>javac -encoding UTF-8  F:\untitled\src\Client.java
4.2 启动服务器

这时候服务器处于accept的阻塞状态,等待客户端的连接

F:\untitled\src>java Server
启动服务器,监听端口:8888
4.3 启动客户端,服务端连接成功

启动客户端

F:\untitled\src>java Client

服务端与客户端连接成功

客户端Port:10302连接完成
4.4 客户端输入消息

在客户端输入内容按回车

Jessica & Maomaos
4.5 服务端接收消息并返回

服务端便会接受到客户端发送过来的消息

客户端Port:10302发送的消息式:Jessica & Maomaos

我们程序中让服务端返回消息给客户端,所以客户端接收消息

服务器发送消息:Jessica & Maomaos

客户端关闭Socket

关闭客户端Socket

送过来的消息

客户端Port:10302发送的消息式:Jessica & Maomaos

我们程序中让服务端返回消息给客户端,所以客户端接收消息

服务器发送消息:Jessica & Maomaos

客户端关闭Socket

关闭客户端Socket

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值