一个简单的客户-服务器的Socket通信程序

本文介绍了一个简单的客户端-服务器通信程序,用于计算输入的圆半径对应的圆面积。用户通过命令行输入半径值,程序计算面积并将结果反馈给用户,直至用户输入'bye'终止会话。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在本程序中,客户端从命令行输入一个半径值,并传送至服务器,服务器根据这个半径值计算出圆的面积发送给客户端。客户端可以继续输入半径值得到圆的面积,直到输入了bye,结束通信。

本程序仅仅支持一个客户端的连接,一对一模式。
Client.java
package com.leo.socketcom;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class Client {

    public static void main(String[] args) {
        try {
            //1.创建套接字,端口号为5500,连接到本机
            Socket connectToServer = new Socket("localhost",5500);
            //2.将输入流连接到socket上
            DataInputStream inFromServer = new DataInputStream(connectToServer.getInputStream());
            //3. 将输出流连接到socket上
            DataOutputStream outToServer = new DataOutputStream(connectToServer.getOutputStream());
            //4.输入半径数值发送到服务器,输入bye结束。
            System.out.println("输入半径数值发送到服务器,输入bye结束。");

            String outStr,inStr;
            boolean goon = true;
            BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
            while(goon){
                outStr = buf.readLine();
                //4.向服务器发送消息,消息值为半径。
                outToServer.writeUTF(outStr);
               //5.清空发送消息的缓冲区     
                outToServer.flush();
               //6.接受服务器发送的消息
                inStr = inFromServer.readUTF();
                if(!inStr.equals("bye")){
                    System.out.println("从服务器返回的结果是:"+inStr);
                }else
                    goon = false;
            }

            inFromServer.close();
            outToServer.close();
            connectToServer.close();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}


    

Server.java
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    public static void main(String[] args) {
        try{
            System.out.println("等待连接");
            //1.创建服务器套接字
            ServerSocket serverSocket = new ServerSocket(5500);
            //2.侦听来自客户端的连接请求
            Socket connectFromClient = serverSocket.accept();
            System.out.println("连接请求来自:"+connectFromClient.getInetAddress().getHostAddress());

            DataInputStream inFromClient = new DataInputStream(connectFromClient.getInputStream());
            DataOutputStream outToClient = new DataOutputStream(connectFromClient.getOutputStream());

            String str;
            double radius, area;
            boolean goon = true;

            while(goon){
                //从socket中读取数据
                str = inFromClient.readUTF();
                if(!str.equals("bye")){
                    radius = Double.parseDouble(str);
                    System.out.println("接收到的半径值为:\t"+radius);
                    area = radius*radius*Math.PI;
                    str = Double.toString(area);
                    outToClient.writeUTF(str);
                    outToClient.flush();
                    System.out.println("圆的面积"+str+"已经发送");
                }else{
                    goon = false;
                    outToClient.writeUTF("bye");
                    outToClient.flush();
                }
            }
            inFromClient.close();
            outToClient.close();
            serverSocket.close();
            connectFromClient.close();
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}



客户端运行图如下: 



服务器端运行图如下: 

从运行结果图上可以看出,在同一台PC上客户端应用和服务器应用建立的通信连接。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值