zoukankan      html  css  js  c++  java
  • Socket编程半双工

    服务器

    package com.test;
    import java.io.IOException;
    import java.net.*;
    import java.io.*;
    public class MyServer {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            MyServer ms = new MyServer();
        }
        public MyServer(){
            try {
                //服务器用ServerSocket对象创建  参数代表的是在9999端口上监听
                System.out.println("服务器在9999端口等待监听...");
                ServerSocket ss = new ServerSocket(9999);
                //等待监听 accept() 方法返回的是Socket对象
                Socket s = ss.accept();
                //接收客户端输入的数据
                InputStreamReader isr =new InputStreamReader(s.getInputStream());
                BufferedReader br = new BufferedReader(isr);
                //接收控制台输入的数据
                InputStreamReader isr2 =new InputStreamReader(System.in);
                BufferedReader br2 = new BufferedReader(isr2);
                //想客户端写入输出流
                PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
                while(true){
                    String infoFromClient = br.readLine();
                    if(infoFromClient.equals("exit"))
                    {
                        System.out.println("结束对话!");
                        s.close();
                        break;
                    }
                    System.out.println("客户端说:"+infoFromClient);
                    System.out.println("请输入您想对客户端说的话:");
                    String info = br2.readLine();
                    pw.println(info);
                }
                
            } catch (IOException e) {
                e.printStackTrace();
            }
            
        }
    
    }

    客户端

    package com.test;
    import java.net.*;
    import java.io.*;
    public class MyClient {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            MyClient mc = new MyClient();
        }
        public MyClient(){
            try {
                //创建客户端连接通道对象 第一个参数表示连接服务器的ip 第2个参数表示连接哪个端口
                Socket s = new Socket("127.0.0.1",9999);
                //向服务器发送数据  创建写对象 向通道对象的输出流写入数据 true代表及时刷新数据
                PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
                //创建一个输入流  接收从控制台输入的数据
                InputStreamReader isr = new InputStreamReader(System.in);
                BufferedReader br = new BufferedReader(isr);
                
                InputStreamReader isr2 = new InputStreamReader(s.getInputStream());
                BufferedReader br2 = new BufferedReader(isr2);
                
                while(true){
                    System.out.println("请输入您想对服务器说的话:");
                    String infoFromControl = br.readLine();
                    
                    pw.println(infoFromControl);
                    if(infoFromControl.equals("exit"))
                    {
                        System.out.println("对话结束!");
                        s.close();
                        break;
                    }
                    String info = br2.readLine();
                    System.out.println("服务器说:"+info);
                    
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        }
    
    }

    需要注意的地方是,当退出对话判断客户端判断要在想服务端发送数据后判断 不然 服务器没接收到  客户端就关闭了 在这里从两个地方读取数据流 一个是s通道  另一个从控制台读取数据流

  • 相关阅读:
    [Effective JavaScript 笔记]第47条:绝不要在Object.prototype中增加可枚举的属性
    [Effective JavaScript 笔记]第46条:使用数组而不要使用字典来存储有序集合
    [Effective JavaScript 笔记]第45条:使用hasOwnProperty方法以避免原型污染
    [Effective JavaScript 笔记]第44条:使用null原型以防止原型污染
    redhat下配置SEED DVS6446开发环境3
    redhat下配置SEED DVS6446开发环境2
    redhat下配置SEED DVS6446开发环境1
    关于[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)] 的解释
    SQL2008附加数据库报错
    结构体与类
  • 原文地址:https://www.cnblogs.com/mrluotong/p/5958325.html
Copyright © 2011-2022 走看看