Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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_Actionscript 3_Flash_Sockets - Fatal编程技术网

Java 如何运行允许传入连接的简单套接字服务器?

Java 如何运行允许传入连接的简单套接字服务器?,java,actionscript-3,flash,sockets,Java,Actionscript 3,Flash,Sockets,我正在尝试用JAVA构建一个非常简单的套接字服务器,我的Flash应用程序可以监听它。一切似乎都在运行——JAVA代码已编译,服务器正在运行 我的问题是:外部应用程序如何仅使用IP地址和端口号向该服务器发送消息?我的目标是flash能够监听外部应用程序发送的套接字消息 Java代码: import java.io.*; import java.net.*; class SimpleServer { private static SimpleServer server;

我正在尝试用JAVA构建一个非常简单的套接字服务器,我的Flash应用程序可以监听它。一切似乎都在运行——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); 
    } 
}

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

假设您的应用程序在家中的计算机上运行,有三种情况涵盖了大多数连接情况:

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

从同一局域网连接(例如,您兄弟的电脑)
使用您的局域网IP(例如192.168.1.4:8080)

从广域网(路由器局域网外)连接(例如互联网)
使用广域网IP(例如84.156.74.194)。有很多网站告诉你你的WAN IP,比如
您可能需要设置路由器,才能将端口8080转发到PC


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

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

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

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

我认为您忽略了客户机/服务器套接字应用程序的要点

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

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

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

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

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

我的目标是flash能够监听外部应用程序发送的套接字消息


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

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