繁体   English   中英

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

[英]Is it possible to run a socket server and socket client on the same machine?

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

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

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

您应该能够按原样运行此 class。

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();
    }
}

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

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");

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

是的,这是完全可能的。 每个操作系统都有一个环回接口。 您可以让多个客户端连接到计算机上的一台服务器。 这种通信发生在环回接口上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM