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

时间:2014-04-02 12:17:31

标签: java actionscript-3 flash sockets

我正在尝试在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 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

答案 1 :(得分:1)

也许我没有正确理解您的问题描述,但如果您使用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()));

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

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

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

当你提到

  

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

它实际上是客户端的Flash应用程序,除非编程为充当服务器,否则它无法监听。我希望这提供了一些清晰度!