【问题标题】:How to run a simple socket server that allows incoming connections?如何运行允许传入连接的简单套接字服务器?
【发布时间】:2014-04-02 12:17:31
【问题描述】:

我正在尝试用 JAVA 构建一个非常简单的套接字服务器,我的 Flash 应用程序可以监听它。 I am using this tutorial。一切似乎都在工作 - JAVA 代码已编译并且服务器正在运行。

我的问题是:外部应用程序如何仅使用 IP 地址和端口号向该服务器发送消息?我的目标是 flash 可以监听外部应用程序发送的套接字消息。

Java 代码:

import java.io.*; 
import java.net.*; 

class SimpleServer { 
    private static SimpleServer server; 
    ServerSocket socket; 
    Socket incoming; 
    BufferedReader readerIn; 
    PrintStream printOut; 

    public static void main(String[] args) { 
        int port = 8080; 

        try { 
            port = Integer.parseInt(args[0]); 
        } catch (ArrayIndexOutOfBoundsException e) { 
            // Catch exception and keep going. 
        } 

        server = new SimpleServer(port); 
    } 


    private SimpleServer(int port) { 
        System.out.println(">> Starting SimpleServer"); 

        try { 
            socket   = new ServerSocket(port); 
            incoming = socket.accept(); 
            readerIn = new BufferedReader(
                           new InputStreamReader(
                               incoming.getInputStream())); 
            printOut = new PrintStream(incoming.getOutputStream()); 

            printOut.println("Enter EXIT to exit.\r"); 
            out("Enter EXIT to exit.\r"); 
            boolean done = false; 

            while (!done) { 
                String str = readerIn.readLine(); 

                if (str == null) { 
                    done = true; 
                } else { 
                    out("Echo: " + str + "\r"); 

                    if(str.trim().equals("EXIT"))
                        done = true; 
                } 

                incoming.close(); 
            } 
        } catch (Exception e) { 
            System.out.println(e); 
        } 
    } 

    private void out(String str) { 
        printOut.println(str); 
        System.out.println(str); 
    } 
}

【问题讨论】:

  • 您已收到 4 个针对您的问题的不同答案。其中之一是否回答了您的问题?
  • 非常感谢您的回答,但我还没有时间构建新的服务器测试!

标签: java actionscript-3 flash sockets


【解决方案1】:

也许我没有正确理解您的问题描述,但如果您使用 Java 创建服务器,它会侦听其端口而不是您的 Flash 应用程序。如果您希望您的 Flash 应用程序等待来自其他应用程序的消息,它必须具有服务器角色并像此 Java 服务器一样侦听 TCP 端口。

您可以通过telnet 程序(适用于所有操作系统)通过提供主机名或 IP 地址和端口作为参数轻松连接并测试给定的 Java 服务器:

telnet 127.0.0.1 8080

任何其他应用程序都可以通过类似的方式进行连接,只需使用主机名/IP 地址和端口即可。例如在 Java 中,您可以创建一个客户端套接字:

Socket clientSocket = new Socket("localhost", 8080);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

【讨论】:

    【解决方案2】:

    通过不为您的套接字指定 IP 地址,它将侦听 0.0.0.0(所有接口)。 实际上,这通常是您计算机的 IP / 服务器的 IP。

    假设你的应用程序在你家的电脑上运行,有三种情况涵盖了大部分的连接情况:

    从同一台机器连接
    使用 127.0.0.1:8080

    从同一个 LAN 连接(例如您兄弟的 PC)
    使用您的 LAN IP(例如 192.168.1.4:8080)

    从 WAN 连接(在您的路由器 LAN 之外)(例如互联网)
    使用您的 WAN IP。(例如 84.156.74.194)。有很多网站会告诉您您的 WAN IP,例如 this
    您可能需要设置路由器,将端口 8080 转发到您的 PC

    对于简单的连接测试,可以使用 telnet 客户端。

    【讨论】:

      【解决方案3】:

      我认为您缺少客户端/服务器套接字应用程序的要点。

      如果您正在构建套接字 server(使用您选择的任何编程语言),那么您需要使用 (a) 套接字 client(s) 连接到此服务器。在客户端和服务器之间成功建立(持久)连接后,您可以开始在它们之间实现的任何类型的通信。

      服务器始终充当被动者,客户端充当套接字服务器/客户端星座中的主动部分。

      【讨论】:

        【解决方案4】:

        我正在检查您所指的link。在那里,提到了创建独立服务器的过程,这也是您粘贴的代码。

        根据链接,应用程序充当客户端并使用XMLSocket 方法连接到此服务器。此应用程序是您正在谈论的 Flash 应用程序。如链接中所述,通过使用以下代码,任何 Flash 应用程序都可以连接并与服务器对话:

            var xmlsock:XMLSocket = new XMLSocket(); 
            xmlsock.connect("127.0.0.1", 8080);
            xmlsock.send(xmlFormattedData);
        

        当你提到

        我的目标是让 flash 可以监听外部应用程序发送的套接字消息。

        它实际上是作为客户端的 Flash 应用程序,除非编程为服务器,否则它无法侦听。我希望这能提供一些清晰的信息!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-10
          • 2022-01-07
          • 1970-01-01
          • 1970-01-01
          • 2020-10-27
          相关资源
          最近更新 更多