我正在尝试在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);
}
}
答案 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应用程序,除非编程为充当服务器,否则它无法监听。我希望这提供了一些清晰度!