用Java 实现客户端-服务器通信

文章讲述了客户端代码如何通过套接字与服务器交互,发送图片文件和UTF-8编码的字符串,以及服务器端如何接收和响应这些请求的过程。
摘要由CSDN通过智能技术生成

 

  1. 代码创建了一个套接字对象,并使用指定的IP地址和端口号(在此例中为9999)连接到服务器。

  2. 在建立连接后,代码获取套接字的输出流,以将数据发送到服务器。然后,它继续向服务器发送一张图片文件。代码以1024字节为单位读取图片文件,并将其写入输出流。文件发送完毕后,代码关闭了图片文件的输入流。

    在发送图片后,代码向服务器发送一个字符串消息。该消息使用UTF-8编码转换为字节数组,并写入输出流。

  3. 接下来,代码获取套接字的输入流,以接收服务器的响应。它创建了一个字节数组,并将响应数据读取到其中。然后,代码使用UTF-8编码将接收到的字节转换为字符串,并打印响应。

如果在此过程中发生任何异常,代码将抛出一个带有异常详细信息的RuntimeException

总而言之,该代码建立了与服务器的连接,向服务器发送一张图片文件和一个字符串消息,然后接收并打印服务器的响应。

客户端代码如下:

public class Client {
    public static void main(String[] args) {
        //创建套接字对象访问服务器端口
        try {
            //1
            Socket s = new Socket("ip地址",9999);

            //2发送请求
            OutputStream os = s.getOutputStream();

            // 发送图片
            FileInputStream fileInputStream = new FileInputStream("图片路径");
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = fileInputStream.read(buffer)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            fileInputStream.close();

            // 发送信息
            String message = "信息";
            os.write(message.getBytes("utf-8"));

            //3 接受响应
            InputStream is = s.getInputStream();
            int len =0;
            byte[]bytes = new byte[1024];
            len=is.read(bytes);
            System.out.println("收到响应:"+new String(bytes,0,len,"utf-8"));
        }  catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
  1. 代码创建了一个ServerSocket对象,用于监听指定的端口号(在此例中为9999)。

  2. 启动服务器后,代码通过调用accept()方法等待客户端的连接。一旦有客户端连接到服务器,accept()方法就会返回一个与该客户端通信的Socket对象。

  3. 代码从客户端的Socket对象中获取输入流,以读取客户端发送的请求数据。它创建一个字节数组,并将接收到的请求数据读取到数组中。然后,代码将字节数组转换为字符串,使用UTF-8编码进行解码,并打印收到的请求。

  4. 接下来,代码通过客户端的Socket对象获取输出流,以向客户端发送响应。它创建一个字符串作为响应内容,将其转换为字节数组,并使用UTF-8编码进行编码。然后,代码将字节数组写入输出流,发送响应给客户端。

如果在此过程中发生任何异常,代码将抛出一个带有异常详细信息的RuntimeException

总而言之,该代码创建了一个服务器,并在指定的端口上监听客户端的连接请求。一旦连接建立,它读取客户端的请求,并向客户端发送响应。

服务器代码如下: 

public class Main {
    public static void main(String[] args) {
        //创建服务器
        //创建ServerSocket对象
        try {
            //1 启动服务器
            System.out.println("启动服务器");
            ServerSocket ss=new ServerSocket(9999);
          
            //2 针对该客户端的一个Socke对象
            Socket s=ss.accept();

            //3 读取客户端的请求
           
            InputStream is=s.getInputStream();
            byte[]bytes=new byte[1024];
            int len=0;
            len=is.read(bytes);
            String req=new String(bytes,0,len,"utf-8");
            System.out.println("收到请求"+req);

//          4  响应服务器
            OutputStream os=s.getOutputStream();
            String resp="已经收到请求,这是返回响应";
            os.write(resp.getBytes("utf-8"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值