客户端/服务器-计算

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shytry/article/details/79282159

基础知识点:
TCP(传输控制协议):确保数据的传输,也确保数据包以它们发送的顺序正确发送。(流套接字)
UDP(用户数据报协议):用在IP上标准的,低代价,无连接,主机对主机的协议。(数据套接字)
套接字:两个主机之间连接的端点,用于发送和接收数据。
常出现的异常:
java.net.BindException:端口使用冲突
java.net.UnknownHostException:找不到主机
java.net.ConnectException:由于服务器没有运行,客户端会出现该异常
java.io.EOFException:没有清空缓冲区数据流,获取完整数据出错
java.net.SocketException: Socket is not bound yet:服务器类中没有写端口号
例如: ServerSocket serverSocket=new ServerSocket(8000);//端口号8000要写
网络通信过程:
服务器:server创建serversocket
ServerSocket serversocket=new ServerSocket(端口号);
服务器等待连接请求
Socket socket=serversocket.accept();
客户端创建套接字请求连接服务器
Socket socket=new Socket(IP地址/域名,端口号)
客户端-服务器(计算面积)
客户端:

import javax.swing.*;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;

public class Client extends JFrame{
    /*输入输出流*/
    private DataOutputStream toServer;
    private DataInputStream fromServer;
    public static void main(String [] args){
        new Client();
    }
    public Client(){
        try{
            /*定义输入流--从控制台获取输入*/
            Scanner sc=new Scanner(System.in);
            /*设置连接到服务器*/
            Socket socket=new Socket("localhost",8000);
            fromServer=new DataInputStream(socket.getInputStream());
            toServer=new DataOutputStream(socket.getOutputStream());
            while(true){
                /*获取数据radius*/
                double radius=Double.parseDouble(sc.next());
                /*传送到服务器*/
                toServer.writeDouble(radius);
                /*清空缓存区数据流*/
                ***toServer.flush();***--缺少该语句会出现异常四
                /*得到服务器计算后的数据*/
                double area=fromServer.readDouble();
                System.out.println("Radius is "+radius+"\n");
                System.out.println("Area received from the server is "+area+'\n');
            }
        }catch (IOException ex){
            System.out.println(ex.toString());

        }
    }
}

服务器:

import javax.swing.*;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;

public class Server extends JFrame {
    public static void main(String [] args){
        new Server();
    }
    public Server(){
        try{
            /*创建套结字*/
            ServerSocket serverSocket=new ServerSocket(8000);
           System.out.println("Server started at "+new Date()+'\n');
            /*设置服务器监听*/
            Socket socket=serverSocket.accept();
            /*设置输入输出流*/
            DataInputStream inputFromClient=new DataInputStream(socket.getInputStream());
            DataOutputStream outputToClient=new DataOutputStream(socket.getOutputStream());

            while(true){
                System.out.println("begin");
                /*从客户端接收数据*/
                double radius=inputFromClient.readDouble();
                /*计算面积*/
                double area=radius*radius*Math.PI;
                /*将结果传给客户端*/
                outputToClient.writeDouble(area);
               System.out.println("Radius received from client: "+radius+'\n');
                System.out.println("Area fount: "+area+'\n');
            }
        }catch (IOException e){
            System.err.println(e);
        }

    }
}

猜你喜欢

转载自blog.csdn.net/shytry/article/details/79282159