2014-04-02 37 views
0

我想在我的Flash应用程序可以听到的JAVA中构建一个非常简单的套接字服务器。 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); 
    } 
} 
+0

你收到4个不同的答案给你的问题。这其中的一个问题是否是你的问题? –

+0

我非常感谢答案,但我还没有时间来构建新的服务器测试! – Kokodoko

回答

1

通过为您的插座不指定一个IP地址,它会监听0.0.0.0(所有接口)。实际上,这通常是你的计算机的IP /服务器的IP。

假设您的应用程序在您的计算机在家里上运行,有三种情况是覆盖了大部分的连接情况:

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

来自同一个局域网连接(例如,你兄弟的PC)
使用您的LAN IP(如192.168.1.4:8080)

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

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

1

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

您可以连接到并通过提供主机名或IP地址和端口作为参数由telnet程序(在所有操作系统提供)方便地测试给定的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())); 
0

我认为你缺少的客户机/服务器套接字应用点。

如果你正在构建的插座服务器(与任何编程语言,你选择),然后你会需要用(A)插座客户(S)到该服务器连接。在客户端和服务器之间成功建立连接(持续)后,您可以开始在它们之间实现的任何类型的通信。

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

0

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

根据链接,应用程序充当客户端并使用XMLSocket方法连接到此服务器。此应用程序是您正在讨论的Flash应用程序。由于在链接中提到,通过使用下面的代码任何Flash应用程序可以连接,跟我们的服务器:

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

当你提到

我的目标是Flash可以听插座通过发送邮件外部应用程序。

它实际上是客户端的闪存应用程序,除非编程为充当服务器,否则它不能侦听。我希望这提供一些清晰!

相关问题