Java 网络编程(手动搭建服务器和客户端实现通信)

网络编程

服务器和客户端实现单次通信

服务器的 接受和发送

// 搭建服务器
        ServerSocket server = new ServerSocket(55555);
        System.out.println("服务器启动完成");

        // 等待客户端连接服务器
        Socket socket = server.accept();
        System.out.println("一个客户端连接了");
        
		// --------- 客户端连接服务器,服务器给客户端发送消息
        //获取一个输出流
        OutputStream os = socket.getOutputStream();
        /// 把输出流转成打印流,得到一个打印流
        PrintStream ps = new PrintStream(os);
        ps.println("欢迎你连接服务器");


        // ---------- 服务器接受到客户端的回复
        InputStream inputStream = socket.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String text = bufferedReader.readLine();
        System.out.println("服务器接收到客户端的回复:"+text);

客户端的访问和接收

		// 连接服务器  服务器ip , 端口
        Socket socket = new Socket("localhost",55555);

		// ------客户端接收服务器的信息
        // 获取一个输入流 is,通过BufferedReader 一行行读取
        InputStream is = socket.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String text = br.readLine();
        System.out.println("客户端接到消息:"+text);

		// -------客户端向服务器发送信息
        // 访问服务器的 输出流
        OutputStream os = socket.getOutputStream();
        PrintStream ps = new PrintStream(os);
        ps.println("服务器你好");
    }

进阶版的,可以实现多个客户端访问的例子

服务器可以接受多个 客户端的访问。增加了线程,避免因某个客户端的卡顿影响其他客户端的访问。

package 服务器;

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

/**
 * @program: 服务器和客户端
 * @description:
 * @author: 白嫖怪AE
 * @create: 2021-11-24 15:38
 **/
public class Server {
    public static void main(String[] args) throws IOException {
        // 搭建服务器
        ServerSocket server = new ServerSocket(55555);
        System.out.println("服务器启动完成");

        // 等待客户端连接服务器
        /**
         *  while 循环可以实现,多个客户端的访问。
         *  但是,一但有 一个客户端卡主,那么剩下的客户端都会等待
         * */
        while(true) {
            Socket socket = server.accept();
            // 添加线程,实现 避免访问等待
            new Thread(){
                @Override
                public void run() {
                    try {
                        OutputStream outputStream = socket.getOutputStream();
                        PrintStream printStream = new PrintStream(outputStream);
                        printStream.println("欢迎你连接服务器");

                        // 服务器获得 客户端的消息
                        InputStream inputStream = socket.getInputStream();
                        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                        String text = bufferedReader.readLine();
                        System.out.println("服务器收到客户端的回复"+text);
                    }    catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }.start();
            System.out.println("一个客户端连接了");
        }

    }
}

客户端的发送和接受

package 客户端;

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

/**
 * @program: 服务器和客户端
 * @description:
 * @author: 白嫖怪AE
 * @create: 2021-11-24 15:38
 **/
public class clent {
    public static void main(String[] args) throws IOException {
        // 连接服务器  服务器ip , 端口
        Socket socket = new Socket("localhost",55555);

        // 获取一个输入流 is,通过BufferedReader 一行行读取
        InputStream is = socket.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String text = br.readLine();
        System.out.println("客户端接到消息:"+text);

        // 访问服务器的 输出流
        OutputStream os = socket.getOutputStream();
        PrintStream ps = new PrintStream(os);
        ps.println("服务器你好");
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值