m0_58326998 2021-12-15 17:32 采纳率: 83.3%
浏览 285
已结题

如何使用套接字连接编写网络程序,客户输入三角形的3条边并发送给服务器,服务器计算出的三角形的面积返回给客户?(语言-java)

使用套接字连接编写网络程序,客户输入三角形的3条边并发送给服务器,服务器计算出的三角形的面积返回给客户。

  • 写回答

2条回答 默认 最新

  • CSDN专家-sinJack 2021-12-15 17:35
    关注

    学习一下socket,通过socket可以实现客服端服务器之间的通信。

    public class Server {  
        public static final int PORT = 12345;//监听的端口号     
          
        public static void main(String[] args) {    
            System.out.println("服务器启动...\n");    
            Server server = new Server();    
            server.init();    
        }    
        
        public void init() {    
            try {    
                ServerSocket serverSocket = new ServerSocket(PORT);    
                while (true) {    
                    // 一旦有堵塞, 则表示服务器与客户端获得了连接    
                    Socket client = serverSocket.accept();    
                    // 处理这次连接    
                    new HandlerThread(client);    
                }    
            } catch (Exception e) {    
                System.out.println("服务器异常: " + e.getMessage());    
            }    
        }    
        
        private class HandlerThread implements Runnable {    
            private Socket socket;    
            public HandlerThread(Socket client) {    
                socket = client;    
                new Thread(this).start();    
            }    
        
            public void run() {    
                try {    
                    // 读取客户端数据    
                    DataInputStream input = new DataInputStream(socket.getInputStream());  
                    String clientInputStr = input.readUTF();//这里要注意和客户端输出流的写方法对应,否则会抛 EOFException  
                    // 处理客户端数据    
                    System.out.println("客户端发过来的内容:" + clientInputStr);    
        
                    // 向客户端回复信息    
                    DataOutputStream out = new DataOutputStream(socket.getOutputStream());    
                    System.out.print("请输入:\t");    
                    // 发送键盘输入的一行    
                    String s = new BufferedReader(new InputStreamReader(System.in)).readLine();    
                    out.writeUTF(s);    
                      
                    out.close();    
                    input.close();    
                } catch (Exception e) {    
                    System.out.println("服务器 run 异常: " + e.getMessage());    
                } finally {    
                    if (socket != null) {    
                        try {    
                            socket.close();    
                        } catch (Exception e) {    
                            socket = null;    
                            System.out.println("服务端 finally 异常:" + e.getMessage());    
                        }    
                    }    
                }   
            }    
        }    
    }
    
    public class Client {  
        public static final String IP_ADDR = "localhost";//服务器地址   
        public static final int PORT = 12345;//服务器端口号    
          
        public static void main(String[] args) {    
            System.out.println("客户端启动...");    
            System.out.println("当接收到服务器端字符为 \"OK\" 的时候, 客户端将终止\n");   
            while (true) {    
                Socket socket = null;  
                try {  
                    //创建一个流套接字并将其连接到指定主机上的指定端口号  
                    socket = new Socket(IP_ADDR, PORT);    
                        
                    //读取服务器端数据    
                    DataInputStream input = new DataInputStream(socket.getInputStream());    
                    //向服务器端发送数据    
                    DataOutputStream out = new DataOutputStream(socket.getOutputStream());    
                    System.out.print("请输入: \t");    
                    String str = new BufferedReader(new InputStreamReader(System.in)).readLine();    
                    out.writeUTF(str);    
                        
                    String ret = input.readUTF();     
                    System.out.println("服务器端返回过来的是: " + ret);    
                    // 如接收到 "OK" 则断开连接    
                    if ("OK".equals(ret)) {    
                        System.out.println("客户端将关闭连接");    
                        Thread.sleep(500);    
                        break;    
                    }    
                      
                    out.close();  
                    input.close();  
                } catch (Exception e) {  
                    System.out.println("客户端异常:" + e.getMessage());   
                } finally {  
                    if (socket != null) {  
                        try {  
                            socket.close();  
                        } catch (IOException e) {  
                            socket = null;   
                            System.out.println("客户端 finally 异常:" + e.getMessage());   
                        }  
                    }  
                }  
            }    
        }    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月23日
  • 已采纳回答 12月15日
  • 创建了问题 12月15日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效