Java 如何运行允许传入连接的简单套接字服务器?
我正在尝试用JAVA构建一个非常简单的套接字服务器,我的Flash应用程序可以监听它。一切似乎都在运行——JAVA代码已编译,服务器正在运行 我的问题是:外部应用程序如何仅使用IP地址和端口号向该服务器发送消息?我的目标是flash能够监听外部应用程序发送的套接字消息 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;
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个不同的问题答案。其中一个回答了您的问题吗?我非常感谢您的回答,但我还没有时间构建新的服务器测试!