• Tags ,
  •         
  • www.breakyizhan.com
  •    

    本文介绍了一种非常基本的单向客户端和服务器设置,其中客户端连接,向服务器发送消息,服务器使用Socket套接字连接显示它们。有很多低级的东西需要发生才能使这些东西工作,但Java API网络包(java.net)负责所有这些,使程序员的网络编程变得非常容易。

    Socket套接字客户端编程

    建立Socket套接字连接

    要连接到其他机器,我们需要一个套接字连接。套接字连接意味着两台机器有关于彼此的网络位置(IP地址)和TCP端口的信息.java.net.Socket类表示一个Socket。打开套接字:

    Socket socket = new Socket(“127.0.0.1”, 5000)
    • 第一个参数 -  服务器的IP地址。(127.0.0.1是localhost的IP地址,其中代码将在单个独立计算机上运行)。
    • 第二个参数 -  TCP端口。(只是表示在服务器上运行的应用程序的数字。例如,HTTP在端口80上运行。端口号可以是0到65535)

    通讯

    要通过套接字连接进行通信,流用于输入和输出数据。

    关闭连接

    一旦发送到服务器的消息,就会显式关闭套接字连接。

    在程序中,客户端不断读取用户的输入并发送到服务器,直到键入“Over”。

    Java实现

    // A Java program for a Client 
    import java.net.*; 
    import java.io.*; 
      
    public class Client 
    { 
        // initialize socket and input output streams 
        private Socket socket            = null; 
        private DataInputStream  input   = null; 
        private DataOutputStream out     = null; 
      
        // constructor to put ip address and port 
        public Client(String address, int port) 
        { 
            // establish a connection 
            try
            { 
                socket = new Socket(address, port); 
                System.out.println("Connected"); 
      
                // takes input from terminal 
                input  = new DataInputStream(System.in); 
      
                // sends output to the socket 
                out    = new DataOutputStream(socket.getOutputStream()); 
            } 
            catch(UnknownHostException u) 
            { 
                System.out.println(u); 
            } 
            catch(IOException i) 
            { 
                System.out.println(i); 
            } 
      
            // string to read message from input 
            String line = ""; 
      
            // keep reading until "Over" is input 
            while (!line.equals("Over")) 
            { 
                try
                { 
                    line = input.readLine(); 
                    out.writeUTF(line); 
                } 
                catch(IOException i) 
                { 
                    System.out.println(i); 
                } 
            } 
      
            // close the connection 
            try
            { 
                input.close(); 
                out.close(); 
                socket.close(); 
            } 
            catch(IOException i) 
            { 
                System.out.println(i); 
            } 
        } 
      
        public static void main(String args[]) 
        { 
            Client client = new Client("127.0.0.1", 5000); 
        } 
    } 
    

    Socket套接字服务器编程

    建立Socket套接字连接

    要编写服务器应用程序,需要两个套接字。

    • 等待客户端请求的ServerSocket(当客户端创建新的Socket()时)
    • 用于与客户端通信的普通旧Socket套接字。

    通讯

    getOutputStream()方法用于通过Socket套接字发送输出。

    关闭连接

    完成后,通过关闭套接字以及输入/输出流来关闭连接非常重要。

    // A Java program for a Server
    import java.net.*;
    import java.io.*;
     
    public class Server
    {
        //initialize socket and input stream
        private Socket          socket   = null;
        private ServerSocket    server   = null;
        private DataInputStream in       =  null;
     
        // constructor with port
        public Server(int port)
        {
            // starts server and waits for a connection
            try
            {
                server = new ServerSocket(port);
                System.out.println("Server started");
     
                System.out.println("Waiting for a client ...");
     
                socket = server.accept();
                System.out.println("Client accepted");
     
                // takes input from the client socket
                in = new DataInputStream(
                    new BufferedInputStream(socket.getInputStream())); 
     
                String line = "";
     
                // reads message from client until "Over" is sent
                while (!line.equals("Over"))
                {
                    try
                    {
                        line = in.readUTF();
                        System.out.println(line);
     
                    }
                    catch(IOException i)
                    {
                        System.out.println(i);
                    }
                }
                System.out.println("Closing connection");
     
                // close connection
                socket.close();
                in.close();
            }
            catch(IOException i)
            {
                System.out.println(i);
            }
        }
     
        public static void main(String args[])
        {
            Server server = new Server(5000);
        }
    }
    

    重点

    • 服务器应用程序在特定端口5000上创建一个ServerSocket。这启动我们的服务器侦听进入端口5000的客户端请求。
    • 然后,Server创建一个新的Socket以与客户端通信。
    socket = server.accept()
    • accept()方法阻塞(只是坐在那里),直到客户端连接到服务器。
    • 然后我们使用getInputStream()方法从套接字获取输入。我们的服务器不断接收消息,直到客户端发送“Over”。
    • 在我们完成之后,我们通过关闭套接字和输入流来关闭连接。
    • 要在计算机上运行客户端和服务器应用程序,请编译它们。然后首先运行服务器应用程序,然后运行客户端应用程序。

    在终端或命令提示符上运行

    为Server打开两个窗口,为Client打开另一个窗口

    1.首先运行Server应用程序,

    $ java Server

    Server started
    Waiting for a client …

    2.然后在另一个终端上运行客户端应用程序,

    $ java Client

    它将显示 - 已连接且服务器接受客户端并显示,

    客户接受

    3.然后,您可以在“客户端”窗口中开始键入消息。以下是客户端的示例输入

    Hello
    I made my first socket connection
    Over

    服务器同时接收和显示的内容,

    Hello
    I made my first socket connection
    Over
    Closing connection

    请注意,发送“Over”会关闭客户端和服务器之间的连接,就像之前所说的那样。

    如果你正在使用Eclipse,则用下面的步骤:

    1.  在两个不同的终端或选项卡上编译它们
    2.  首先运行Server程序
    3.  然后运行客户端程序
    4.  在客户端窗口中键入消息,将同时由服务器窗口接收和显示。
    5.  输入结束。

     
    转载请保留页面地址:https://www.breakyizhan.com/java/6602.html