Using Sockets to send and receive data

前端 未结 3 1491
刺人心
刺人心 2020-12-04 11:27

I am using sockets to connect my Android application (client) and a Java backend Server. From the client I would like to send two variables of data each time I communicate w

3条回答
  •  北海茫月
    2020-12-04 12:01

        //Client
    
        import java.io.*;
        import java.net.*;
    
        public class Client {
            public static void main(String[] args) {
    
            String hostname = "localhost";
            int port = 6789;
    
            // declaration section:
            // clientSocket: our client socket
            // os: output stream
            // is: input stream
    
                Socket clientSocket = null;  
                DataOutputStream os = null;
                BufferedReader is = null;
    
            // Initialization section:
            // Try to open a socket on the given port
            // Try to open input and output streams
    
                try {
                    clientSocket = new Socket(hostname, port);
                    os = new DataOutputStream(clientSocket.getOutputStream());
                    is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                } catch (UnknownHostException e) {
                    System.err.println("Don't know about host: " + hostname);
                } catch (IOException e) {
                    System.err.println("Couldn't get I/O for the connection to: " + hostname);
                }
    
            // If everything has been initialized then we want to write some data
            // to the socket we have opened a connection to on the given port
    
            if (clientSocket == null || os == null || is == null) {
                System.err.println( "Something is wrong. One variable is null." );
                return;
            }
    
            try {
                while ( true ) {
                System.out.print( "Enter an integer (0 to stop connection, -1 to stop server): " );
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                String keyboardInput = br.readLine();
                os.writeBytes( keyboardInput + "\n" );
    
                int n = Integer.parseInt( keyboardInput );
                if ( n == 0 || n == -1 ) {
                    break;
                }
    
                String responseLine = is.readLine();
                System.out.println("Server returns its square as: " + responseLine);
                }
    
                // clean up:
                // close the output stream
                // close the input stream
                // close the socket
    
                os.close();
                is.close();
                clientSocket.close();   
            } catch (UnknownHostException e) {
                System.err.println("Trying to connect to unknown host: " + e);
            } catch (IOException e) {
                System.err.println("IOException:  " + e);
            }
            }           
        }
    
    
    
    
    
    //Server
    
    
    
    
    import java.io.*;
    import java.net.*;
    
    public class Server1 {
        public static void main(String args[]) {
        int port = 6789;
        Server1 server = new Server1( port );
        server.startServer();
        }
    
        // declare a server socket and a client socket for the server
    
        ServerSocket echoServer = null;
        Socket clientSocket = null;
        int port;
    
        public Server1( int port ) {
        this.port = port;
        }
    
        public void stopServer() {
        System.out.println( "Server cleaning up." );
        System.exit(0);
        }
    
        public void startServer() {
        // Try to open a server socket on the given port
        // Note that we can't choose a port less than 1024 if we are not
        // privileged users (root)
    
            try {
            echoServer = new ServerSocket(port);
            }
            catch (IOException e) {
            System.out.println(e);
            }   
    
        System.out.println( "Waiting for connections. Only one connection is allowed." );
    
        // Create a socket object from the ServerSocket to listen and accept connections.
        // Use Server1Connection to process the connection.
    
        while ( true ) {
            try {
            clientSocket = echoServer.accept();
            Server1Connection oneconnection = new Server1Connection(clientSocket, this);
            oneconnection.run();
            }   
            catch (IOException e) {
            System.out.println(e);
            }
        }
        }
    }
    
    class Server1Connection {
        BufferedReader is;
        PrintStream os;
        Socket clientSocket;
        Server1 server;
    
        public Server1Connection(Socket clientSocket, Server1 server) {
        this.clientSocket = clientSocket;
        this.server = server;
        System.out.println( "Connection established with: " + clientSocket );
        try {
            is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            os = new PrintStream(clientSocket.getOutputStream());
        } catch (IOException e) {
            System.out.println(e);
        }
        }
    
        public void run() {
            String line;
        try {
            boolean serverStop = false;
    
                while (true) {
                    line = is.readLine();
            System.out.println( "Received " + line );
                    int n = Integer.parseInt(line);
            if ( n == -1 ) {
                serverStop = true;
                break;
            }
            if ( n == 0 ) break;
                    os.println("" + n*n ); 
                }
    
            System.out.println( "Connection closed." );
                is.close();
                os.close();
                clientSocket.close();
    
            if ( serverStop ) server.stopServer();
        } catch (IOException e) {
            System.out.println(e);
        }
        }
    }
    

提交回复
热议问题