【Java线程】多线程实现简单的一对一聊天

实现原理:
1、主方法:在主方法中构建一个输入流接收键盘的输入,根据接收到的输入信息判定角色是服务器端还是客户端;然后构建相应的socket,开启线程;
2、线程-坚守键盘阵地:接收键盘的输入,将从键盘输入的信息写入到网络中去;
3、线程-坚守网络阵地:从网络中读入信息,并将其打印到控制台;

代码示例:
GoodTcp.java:

package com.lmb;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class GoodTcp {

    public static void main(String[] args) throws Exception {
         System.out.println("请输入IP和端口号,或直接输入端口号:");
         System.out.println("例如:192.168.0.2,8888或者8888");
         //构建输入流接收键盘的输入,从输入的信息判断是服务器端还是客户端
         String[] ss=new BufferedReader(new InputStreamReader(System.in)).readLine().split(",");
         Socket skt=null;
         if (ss.length==1) {
            //服务器端
            skt=new ServerSocket(Integer.parseInt(ss[0])).accept();
        }else {
            //客户端端
            skt=new Socket(ss[0],Integer.parseInt(ss[1]));
        }
        new KeyTcp(skt).start();//将坚守键盘阵地的线程开启
        new NetTcp(skt).start();//将坚守网络阵地的线程开启
    }
}
/**
 * 坚守键盘阵地,功能:接受键盘的输入,将从键盘写入的信息输出到网络中去
 */
class KeyTcp extends Thread{
    private Socket skt;
    public KeyTcp(Socket skt) {
        this.skt=skt;
    }

    public void run() {
        try {
            //构建输入流接收键盘的输入
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            //构建输出流,将从键盘接收的信息写入到网络
            PrintWriter pw=new PrintWriter(skt.getOutputStream());
            for (;;) {
                String s=br.readLine();
                if (s==null) break;
                pw.println(s);
                pw.flush();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

/**
 * 坚守网络阵地,功能:从网络中读入信息,并将其打印到控制台
 */
class NetTcp extends Thread{

    private Socket skt;
    public NetTcp(Socket skt) {
        this.skt=skt;
    }

    public void run() {
        try {
            //构建输入流,从网络中读入信息,并将其打印到控制台
            BufferedReader br=new BufferedReader(new InputStreamReader(skt.getInputStream()));
            for (;;) {
                System.out.println(br.readLine());
            }
        } catch (Exception e) {
            System.out.println("对方下线或者掉线……");
        }
    }                                                                                                                                     
}

运行结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值