Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以在同一台计算机上运行套接字服务器和套接字客户端?_Java_Sockets_Client Server_Localhost - Fatal编程技术网

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

Java 是否可以在同一台计算机上运行套接字服务器和套接字客户端?,java,sockets,client-server,localhost,Java,Sockets,Client Server,Localhost,在java中,可以创建套接字服务器和套接字客户端,是否可以在同一台机器上运行套接字服务器的实例和从套接字服务器接收数据的套接字/服务器客户端 e、 g套接字服务器在端口60010上运行 套接字客户端运行在同一台机器上,通过套接字连接到该端口,或者我需要通过一台新机器将其添加到我的网络中?如果它在TCP/IP层上运行唯一的IP地址和端口号。是,您可以在同一台机器上运行以下各项: ServerSocket server = new ServerSocket(60010); Socket client

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

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

是,您可以在同一台机器上运行以下各项:

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

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

下面是一个简单的可运行示例,让您开始使用。它启动两个线程,一个带有
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();
    }
}

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

是的,这是绝对可能的。您可以很容易地亲自尝试和查看。您不能在同一端口上创建两个套接字您不能将两个服务器套接字绑定到同一端口,但您可以让多个客户端套接字连接到同一端口(就像在web服务器中一样)。在web服务器中,它是一个服务器套接字。。。不管怎样,如果你这么说,我相信你。根据我的经验,我总是让客户端套接字具有“随机”端口号。这就是我上面描述的,一个服务器套接字和一个客户端套接字。这有什么不同?如果客户机和服务器位于不同的进程中,会有问题吗?