Java 在单个系统上运行客户机/服务器程序

Java 在单个系统上运行客户机/服务器程序,java,client-server,Java,Client Server,我想知道是否有两个程序,一个叫做server,另一个叫做client,这两个程序分别演示了服务器和客户端,是否可以在一台机器上测试它们?考虑到我对客户端套接字的定义如下: socket = new Socket("127.0.0.1",3000); 编辑: 服务器部件: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.Print

我想知道是否有两个程序,一个叫做
server
,另一个叫做
client
,这两个程序分别演示了服务器和客户端,是否可以在一台机器上测试它们?考虑到我对客户端套接字的定义如下:

socket = new Socket("127.0.0.1",3000);
编辑: 服务器部件:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

class TCPServer
{
       private static ServerSocket serverSocket;
        private static Socket socket;
        private static PrintWriter toClient;
        private static BufferedReader fromClient;
        public static void run() throws IOException
            {
            System.out.println("Server is waiting for connections...");
            while (true)
            {
                openStreams();
                processClient();
                closeStreams();
            }

        }

        public static void openStreams() throws IOException
            {
            serverSocket = new ServerSocket(3000);
            socket = serverSocket.accept();
            toClient = new PrintWriter(socket.getOutputStream(),true);
            fromClient = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        }
        public static void closeStreams() throws IOException
            {
            fromClient.close();
            toClient.close();
            socket.close();
            serverSocket.close();
        }
      public static void processClient()throws IOException
{
    String msg = null;
    do {
        msg = fromClient.readLine();
        toClient.println("Client said " + msg);
    } while (!"exit".equals(msg));
}

        }
客户部分:

package clientserver.pkg1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

class TCPClient
{
      private PrintWriter toServer;
            private BufferedReader fromServer;
            private Socket socket;
            public void Client( )throws IOException
                {
                socket = new Socket("127.0.0.1",3000);
            }
            public void openStreams() throws IOException
         {

                toServer = new PrintWriter(socket.getOutputStream(),true);
                fromServer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            }
            public void closeStreams() throws IOException
                {
                fromServer.close();
                toServer.close();
                socket.close();
            }
          public void run()throws IOException
{
    openStreams();
    String msg = "";
    Scanner scanner = new Scanner(System.in);
    while (!"exit".equals(msg))
    {
        System.out.print(">");
        msg = scanner.nextLine();
        toServer.println(msg);
        String tmp = fromServer.readLine();
        System.out.println("Server said: " + tmp);
    }
    closeStreams();
}

            }
主类

public static void main(String[] args) {

       try
            {
                 TCPServer server = new TCPServer() {};
                 TCPClient client = new TCPClient();
                 client.run();
                 server.run();




            }
            catch(IOException e)
            {
                 System.err.println("Error in Client " + e.getMessage());
            }




java.lang.NullPointerException
1. 2. 3.
client.run()上

当然,您可以在同一台机器上测试它们,。
几年前,我使用socket开发了类似聊天的应用程序,在使用不同的机器之前,我在同一台机器上进行了测试,结果很好。

当然,您可以在同一台机器上测试它们,。
几年前,我使用socket开发了类似聊天的应用程序,并在同一台机器上进行了测试,然后使用不同的机器进行了测试,结果很好。

您当然可以,只需将客户端和服务器连接到相同的端口号。

您当然可以,只需将客户端和服务器连接到相同的端口号。

您可以在PC的端口上读/写,与您在网络中的位置无关。

您可以在PC的端口上读/写,与您在网络中的位置无关。

是的,您可以编写这样的程序。有一个问题。 简言之,这一切归结为准备一个ServerSocket:

ServerSocket createSocket() {
    ServerSocket serverSocket;
    try {
        serverSocket = new ServerSocket(3000);
    } catch (IOException ex) {
        ex.printStackTrace(System.err);
        throw ex;
    }
    return serverSocket;
}
从程序员的角度来看,驻留在远程机器上的服务器与驻留在本地机器上的服务器没有区别

您可以尝试编写两个不同的程序,一个用于服务器,另一个用于客户端。 这是客户端的主要问题:

public static void main(String[] args) {
  try {
      TCPClient client = new TCPClient() {};
      client.run();
  } catch(IOException e) {
    System.err.println("Error in Client " + e.getMessage());
  }
对于服务器:

public static void main(String[] args) {
  try {
      TCPServer server = new TCPServer() {};
      server.run();
  } catch(IOException e) {
    System.err.println("Error in Server " + e.getMessage());
  }

然后先运行服务器,然后在另一个控制台中运行客户端。

是的,您可以编写这样的程序。有一个问题。 简言之,这一切归结为准备一个ServerSocket:

ServerSocket createSocket() {
    ServerSocket serverSocket;
    try {
        serverSocket = new ServerSocket(3000);
    } catch (IOException ex) {
        ex.printStackTrace(System.err);
        throw ex;
    }
    return serverSocket;
}
从程序员的角度来看,驻留在远程机器上的服务器与驻留在本地机器上的服务器没有区别

您可以尝试编写两个不同的程序,一个用于服务器,另一个用于客户端。 这是客户端的主要问题:

public static void main(String[] args) {
  try {
      TCPClient client = new TCPClient() {};
      client.run();
  } catch(IOException e) {
    System.err.println("Error in Client " + e.getMessage());
  }
对于服务器:

public static void main(String[] args) {
  try {
      TCPServer server = new TCPServer() {};
      server.run();
  } catch(IOException e) {
    System.err.println("Error in Server " + e.getMessage());
  }

然后先运行服务器,然后在不同的控制台中运行客户端。

因此,我应该在两个不同的程序中运行客户端和服务器,还是在同一个控制台中运行客户端和服务器?因为当我这样做的时候,在运行服务器之后一切都正常,但当我运行客户端时,它会给我3个空指针异常,我把它们作为一个编辑放在我的帖子中。所以,我应该在两个不同的程序中运行客户端和服务器,还是在同一个程序中运行客户端和服务器?因为当我这样做的时候,在运行服务器之后一切都正常,但当我运行客户端时,它会给我3个空指针异常,我把它们作为一个编辑放在我的帖子中。所以,我应该在两个不同的程序中运行客户端和服务器,还是在同一个程序中运行客户端和服务器?因为当我这样做的时候,在运行服务器之后一切正常,但是当我运行客户机时,它给我3个空指针异常,我把它们作为一个编辑放在我的post中,你可以发布完整的堆栈跟踪和失败的代码吗?NullPointerException出现在哪里?所以套接字保持为“null”并且不抛出异常?我显示了异常发生的3个点,但我将在这里发布全部代码。我认为您应该在两个不同的程序中或至少在两个单独的线程中运行服务器和客户机。使用这些代码,我不明白服务器如何接受()连接。因此,我应该在两个不同的程序中运行客户端和服务器,还是在同一个程序中运行客户端和服务器?因为当我这样做的时候,在运行服务器之后一切正常,但是当我运行客户机时,它给我3个空指针异常,我把它们作为一个编辑放在我的post中,你可以发布完整的堆栈跟踪和失败的代码吗?NullPointerException出现在哪里?所以套接字保持为“null”并且不抛出异常?我显示了异常发生的3个点,但我将在这里发布全部代码。我认为您应该在两个不同的程序中或至少在两个单独的线程中运行服务器和客户机。使用这些代码,我不理解服务器如何接受()连接。