首页 文章

是否可以在同一台机器上运行套接字服务器和套接字客户端?

提问于
浏览
17

在java中,可以创建套接字服务器和套接字客户端,是否可以运行套接字服务器的实例,以及从同一台机器上的套接字服务器接收数据的套接字/服务器客户端?

例如,套接字服务器在端口60010上运行,套接字客户端在通过套接字连接到该端口的同一台机器上运行,或者我需要通过新机器将其添加到我的网络中?如果它在TCP / IP层上运行唯一的IP地址和端口号 .

4 回答

  • 20

    这是一个简单的可运行示例,可以帮助您入门 . 它启动两个线程,一个带有 ServerSocket ,另一个带有 Socket 连接 . 一个连续发送字符串,另一个打印它们 .

    您应该能够按原样运行此类 .

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    public class SocketTest {
        public static void main(String[] args) throws IOException {
    
            startServer();
            startSender();
        }
    
        public static void startSender() {
            (new Thread() {
                @Override
                public void run() {
                    try {
                        Socket s = new Socket("localhost", 60010);
                        BufferedWriter out = new BufferedWriter(
                                new OutputStreamWriter(s.getOutputStream()));
    
                        while (true) {
                            out.write("Hello World!");
                            out.newLine();
                            out.flush();
    
                            Thread.sleep(200);
                        }
    
                    } catch (UnknownHostException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    
        public static void startServer() {
            (new Thread() {
                @Override
                public void run() {
                    ServerSocket ss;
                    try {
                        ss = new ServerSocket(60010);
    
                        Socket s = ss.accept();
    
                        BufferedReader in = new BufferedReader(
                                new InputStreamReader(s.getInputStream()));
                        String line = null;
                        while ((line = in.readLine()) != null) {
                            System.out.println(line);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    }
    
  • 3

    是的,您可以在同一台机器上拥有以下内容:

    ServerSocket server = new ServerSocket(60010);
    Socket client = server.accept();
    

    别的地方:

    Socket socket = new Socket("localhost", 60010);
    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
    out.println("Hello server");
    
  • 1

    是的,您可以在同一台计算机上运行客户端和服务器 . 我一直都在为发展做这件事 . 如果您遇到麻烦,一些路由器在将数据包转发回自身时遇到问题 . 尝试使用localhost而不是外部IP进行开发 .

  • 0

    是的,完全有可能 . 每个操作系统都有一个loopback接口 . 您可以将多个客户端连接到计算机上的一个服务器 . 这种通信通过环回接口进行 .

相关问题