模拟实现微信聊天

其实服务端和客服端的代码,大同小异,会写服务端,那么一定会写客服端 

                     先写一个服务器Sever类(等待客户端连接)

1.借用 ServerSocket端口

        ServerSocket负责接收客户连接请求 

2.创建对象

因为会有网络异常,所以把对象直接写在try{

ServerSocket serverSocket = new ServerSocket(60088)

}catch{Exception e){

}中处理异常

60088是自己电脑的端口号(此处填写自己的)

try{

ServerSocket serverSocket = new ServerSocket(60088)

}catch{Exception e){

}

3.进行等待客户端连接

   Socket c = serverSocket.accept();//中断,等待

有人连接的话阔以输出一下有人连接

  System.out.println("有人连线");

4. 接受客户端的消息

下行代码整体意思就是用InputStreamReader这个中介把c .getInputStream()这个字节流转换成字符流BufferedReader进行读取

这样输入的时候就可以不是一个一个字节读,而是一个一个字符读,再加上是个Buffer,效率会高很多。

然后输出读取内容

 BufferedReader reader = new BufferedReader(new InputStreamReader(c.getInputStream()));
System.out.println(reader.readLine());

 

5.发信息给客户端

使用PrintWriter打印流输出打印自己的客户端的内容 

 

 PrintWriter printWriter = new PrintWriter(c.getOutputStream());

使用Scanner键盘输入信息

Scanner sc = new Scanner(System.in);
System.out.print("输入信息");
                    

并进行打印换行输出

printWriter.write(sc.nextLine() + "\r\n");

 关闭打印流,,服务端写完啦

 printWriter.flush();

6.最后在写一个while(true){}死循环,,中间内容就是发信息和接受信息 的代码(整体代码处有)

7.整体代码 

package cn;/*
 * Copyright (c) 2020, 2023.
 *
 */

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

/**
 * <p>Project: Ch11 - Sever</p>
 * <p>Powered by Cyy On 2023-07-26 10:58:04</p>
 * <p>描述:<p>
 *
 * @author Cyy [210585265@qq.com]
 * @version 1.0
 * @since 17
 */
public class Sever {
    public static void main(String[] args) throws IOException {
        try (ServerSocket serverSocket = new ServerSocket(60088)) {
           // while (true) {多人连线
                Socket c = serverSocket.accept();//中断,等待
                System.out.println("有人连线");
                while (true) {
                    //接受信息
                    BufferedReader reader = new BufferedReader(new InputStreamReader(c.getInputStream()));
                    System.out.println(reader.readLine());

                    //发信息
                    PrintWriter printWriter = new PrintWriter(c.getOutputStream());
                    Scanner sc = new Scanner(System.in);
                    System.out.print("输入信息");
                    printWriter.write(sc.nextLine() + "\r\n");
                    printWriter.flush();
                }
            } catch(Exception e){
                e.printStackTrace();
            }
        //}

    }
}


                                                        编写客户端 (主动连接服务端)

 

1.借用Socket构造方法 

当客户进程发出的连接请求被服务器拒绝,Socket构造方法就会抛出ConnectionException。

所以处理异常

电脑的IP地址192.168.21.19,端口号60088(此处填写自己的)

 try{
Socket c = new Socket("192.168.21.19",60088)

}catch(Exception e){

}

 2. 使用PrintWriter打印流输出打印自己的客户端的内容 

 PrintWriter printWriter = new PrintWriter(c.getOutputStream());

使用Scanner键盘输入信息

Scanner sc = new Scanner(System.in);

3.给服务端发信息 

键盘输入信息并答应出信息

  System.out.print("输入信息");
  printWriter.write(sc.nextLine()+"\r\n");

关闭打印流

    printWriter.flush();

4.接收服务端的信息

下行代码整体意思就是用InputStreamReader这个中介把c .getInputStream()这个字节流转换成字符流BufferedReader进行读取

这样输入的时候就可以不是一个一个字节读,而是一个一个字符读,再加上是个Buffer,效率会高很多。

然后输出读取内容

 BufferedReader reader = new BufferedReader(new InputStreamReader(c.getInputStream()));
System.out.println(reader.readLine());

5.最后和服务端一样在写一个while(true){}死循环,,中间内容就是发信息和接受信息 的代码(整体代码处有)

6.整体代码 

package cn;/*
 * Copyright (c) 2020, 2023.
 *
 */

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

/**
 * <p>Project: Ch11 - Sever2</p>
 * <p>Powered by Cyy On 2023-07-26 10:44:50</p>
 * <p>描述:<p>
 *
 * @author Cyy [210585265@qq.com]
 * @version 1.0
 * @since 17
 */
public class Client {
    public static void main(String[] args) {
         //和别人连线
         //192.168.21.6 1122
        //自己的IP地址192.168.21.19
         try(Socket c = new Socket("192.168.21.19",60088)){
              PrintWriter printWriter = new PrintWriter(c.getOutputStream());
               Scanner sc = new Scanner(System.in);
      while(true){
               //发信息
              System.out.print("输入信息");
              printWriter.write(sc.nextLine()+"\r\n");
              printWriter.flush();

             //接受信息
             BufferedReader reader = new BufferedReader(new InputStreamReader(c.getInputStream()));
             System.out.println(reader.readLine());}

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

    }
}

                                    客户端成功连接服务端 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值