最简单的服务器和客户端Java代码学习

最简单的服务器和客户端Java代码学习,第1张

最简单的服务器和客户端Java代码学习 最简单的服务器和客户端Java代码学习

客户端逻辑

  1. 创建Socket对象
  2. 获取输出流—>请求
  3. 获取输入流—》响应
  4. 关闭流
    客户端代码
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.rmi.UnexpectedException;

public class Client {
    public static void main(String[] args) {
        //1.创建Socket对象
        Socket client = null;
        DataOutputStream dos = null;
        DataInputStream dis = null;
        try {
            client = new Socket("localhost", 8888);
            //2.获取输出流--->请求
            dos = new DataOutputStream(client.getOutputStream());
            dos.writeUTF("我是客户端:服务器你好!");
            //3.获取输入流---》响应
            dis = new DataInputStream(client.getInputStream());
        }catch (UnexpectedException e){
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //4.关闭流
            IOClose.closeAll(dis,dos,client);
        }
    }
}

服务端逻辑

  1. 创建ServerSocket对象
  2. 监听是否有客户端发送请求
  3. 获取Socket对象
  4. 获取输入流 --》得到客户端的请求
  5. 获取输出流—》给客户端响应结果
  6. 关闭流
    服务端代码
public class Server {
    public static void main(String[] args) {
        //1.创建ServerSocket对象
        ServerSocket server = null;
        //2.监听是否有客户端发送请求
        Socket client = null;
        //3.获取Socket对象
        DataInputStream dis = null;
        DataOutputStream dos = null;

        //4.获取输入流 --》得到客户端的请求
        try {
            server = new ServerSocket(8888);

        client = server.accept();
        dis = new DataInputStream(client.getInputStream());
        System.out.println(dis.readUTF());
        //5.获取输出流---》给客户端响应结果
        dos = new DataOutputStream(client.getOutputStream());
        dos.writeUTF("客户端您好:我是服务器,我收到你的消息");
        //6.关闭流
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
            IOClose.closeAll(dos,dis,client,server);
        }
        }
}

CS架构
开启服务端,客户端

BS架构
服务器代码2:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server2 {
    public static void main(String[] args) {
        //1.创建ServerSocket对象
        ServerSocket server = null;
        //2.监听是否有客户端发送请求
        Socket client = null;
        //4.获取输入流 --》得到客户端的请求
        BufferedReader br=null;
        try {
            server = new ServerSocket(8888);
            client = server.accept();
            //获取来自浏览器的请求
             br = new BufferedReader(new InputStreamReader(client.getInputStream(),"utf-8"));
             String str = null;
             while ((str = br.readLine()).length()>0){
                 System.out.println(str);

            }

    } catch (IOException e) {
        e.printStackTrace();
    }finally {
            IOClose.closeAll(br,client,server);
        }
        }
}

网页 get请求


     
               我的第一个html
     
     
                   hello world
                    



     



页面展示:

输入用户名和密码


请求已经发送到服务端,我们去看看服务端

post请求


     
               我的第一个html
     
     
                   hello world
                    



     



服务端代码3

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server3 {
    public static void main(String[] args) {
        //1.创建ServerSocket对象
        ServerSocket server = null;
        //2.监听是否有客户端发送请求
        Socket client = null;
        //4.获取输入流 --》得到客户端的请求

        InputStream is = null;
        try {
            server = new ServerSocket(8888);
            client = server.accept();
            //获取来自浏览器的请求
            is = client.getInputStream();
            byte [] buf = new byte[20480];
            int len = is.read(buf);
            System.out.println(new String(buf,0,len));

            }catch (IOException e){
            e.printStackTrace();

    }finally {
            IOClose.closeAll(is,client,server);
        }
        }
}



登录成功 带有响应结果

服务端代码4

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;


import static jdk.nashorn.internal.runtime.regexp.joni.encoding.CharacterType.BLANK;



public class Server4 {


    public static void main(String[] args) {
        String CRLF = "rn";
        //1.创建ServerSocket对象
        ServerSocket server = null;
        //2.监听是否有客户端发送请求
        Socket client = null;
        //4.获取输入流 --》得到客户端的请求

        InputStream is = null;
        try {
            server = new ServerSocket(8888);
            client = server.accept();
            //获取来自浏览器的请求
            is = client.getInputStream();
            byte [] buf = new byte[20480];
            int len = is.read(buf);
            System.out.println(new String(buf,0,len));
            
            StringBuilder sb = new StringBuilder();
            StringBuilder sbContent = new StringBuilder();//请求的文本
            sbContent.append("响应结果");
            sbContent.append("登录成功");
            //拼接响应头
            sb.append("HTTP/1.1").append(BLANK).append(200).append(BLANK).append("ok");
            sb.append(CRLF);//换行
            sb.append("Content-Type:text/html;charset=utf-8");
            sb.append(CRLF);
            sb.append("Content-Length:").append(sbContent.toString().getBytes().length).append(CRLF);
            sb.append(CRLF);//换行。代表响应头与响应的正文部门之间的空行
            sb.append(sbContent);
            //通过流输出
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream(),"utf-8"));
            bw.write(sb.toString());
            bw.flush();
            bw.close();

            }catch (IOException e){
            e.printStackTrace();

    }finally {
            IOClose.closeAll(is,client,server);
        }
        }
}

关注微信公众号:一只Java程序猿
是对我最好的支持。谢谢

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5659943.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存