网络编程之模拟用户与服务器之间通信

通过TCP协议来模拟用户和服务器之间信息交流

  • 首先需要创建一个服务器端
public class TCPServer {
    public static void main(String[] args) throws IOException {
        //首先创建ServerSocket来实现与客户端连接
        ServerSocket listener = new ServerSocket(1999);
         System.out.println("服务器已启动....");
        //循环
        while (true) {
            //接收客户端发来的信息
            Socket ns = listener.accept();
            //创建一个新的线程对象并启动 将接收自客户端的信息传入此线程
            new SocketThread(ns).start();
        }
    }
}
  • 创建线程
public class SocketThread extends Thread {
    private Socket socket;
    //获取客户端发送到服务器端的信息
    public SocketThread(Socket socket){
        this.socket =socket;
    }

    @Override
    public void run() {
        System.out.println(socket.getInetAddress()+"加入了直播间");
        if (socket!=null){
            BufferedReader br=null;
            try {//调用输入流
                InputStream is = socket.getInputStream();
                //缓存
               br = new BufferedReader(new InputStreamReader(is,"utf-8"));
                //循环
                while(true){
                    //读一行
                    String dada =br.readLine();
                    //当输入数据读完之后跳出循环
                    if (dada==null)break;
                    System.out.println(socket.getInetAddress()+"发送了:"+dada);
                    //输出886或者byebye停止循环
                    if (dada.equals("886")||dada.equals("byebye")){
                        break;
                    }
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    System.out.println(socket.getInetAddress()+"退出了直播间");
                    br.close();
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}
  • 创建客户端
public class TCPClient {
    public static void main(String[] args) throws Exception{
        //连接客户端
        Socket socket = new Socket("192.168.40.1",1999);
        //创建输出流
        OutputStream outputStream = socket.getOutputStream();
        //缓存 使用utf-8编码
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream,"utf-8"));
        //输入数据
        Scanner input =  new Scanner(System.in);
        //循环
        while(true){
            String data = input.nextLine();
            //写入缓存
            bw.write(data);
            //换行
            bw.newLine();
            //释放缓存中数据
            bw.flush();
            //当输入886或者byebye时跳出循环
            if (data.equals("886")||data.equals("byebye")){
                break;
            }
        }
        bw.close();
        socket.close();
    }
}
  • 测试

    • 首先启动服务器端

      • 服务器已启动
        
    • 然后启动客户端

      • 服务器已启动
        /192.168.40.1加入了直播间
        
    • 输入“我爱java”

      • 服务器已启动
        /192.168.40.1加入了直播间
        /192.168.40.1发送了:我爱java
        
    • 输入886或者byebye

      • 服务器已启动
        /192.168.40.1加入了直播间
        /192.168.40.1发送了:我爱java
        /192.168.40.1发送了:886
        /192.168.40.1退出了直播间
        
    • 再次启动客户端

      • 服务器已启动
        /192.168.40.1加入了直播间
        /192.168.40.1发送了:我爱java
        /192.168.40.1发送了:886
        /192.168.40.1退出了直播间
        /192.168.40.1加入了直播间
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值