Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 不确定,但我认为eclipse不会';t在tomcat服务器上运行我的应用程序_Java_Sockets_Tomcat - Fatal编程技术网

Java 不确定,但我认为eclipse不会';t在tomcat服务器上运行我的应用程序

Java 不确定,但我认为eclipse不会';t在tomcat服务器上运行我的应用程序,java,sockets,tomcat,Java,Sockets,Tomcat,好吧,我已经被困了几天的问题是Tomcat不运行我的应用程序。这是我第一次接触Tomcat和服务器编程,所以很可能纯粹是我的错。但几天后,我自己也无法克服,所以我决定在这里发布一个问题 我试过运行很多不同的设置,但现在我是在最简单的一个,仍然无法找出它。因此,我已经安装了:EclipseIDE1.5.0(EclipsePlatform 4.2.0)、WST3.4.1、Tomcat7.0.12(也尝试了7.0.30) 我已经在eclipse中配置好了tomcat服务器,所以当我运行它时,它确实按照

好吧,我已经被困了几天的问题是Tomcat不运行我的应用程序。这是我第一次接触Tomcat和服务器编程,所以很可能纯粹是我的错。但几天后,我自己也无法克服,所以我决定在这里发布一个问题

我试过运行很多不同的设置,但现在我是在最简单的一个,仍然无法找出它。因此,我已经安装了:EclipseIDE1.5.0(EclipsePlatform 4.2.0)、WST3.4.1、Tomcat7.0.12(也尝试了7.0.30)

我已经在eclipse中配置好了tomcat服务器,所以当我运行它时,它确实按照预期工作

然后我得到了一段简单的代码,这段代码来自oracle的服务器套接字指南:

import java.net.*;
import java.io.*;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;


public class KnockKnockServer {
    private static final Logger logger = Logger.getRootLogger();

    public static void main(String[] args) throws IOException {
        BasicConfigurator.configure();
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(4444);
            logger.debug("Socket opened");
            System.err.println("Port opened");
        } catch (IOException e) {
            logger.debug("Could not listen on port: 4444.");
            System.err.println("Port not opened");
            System.exit(1);
        }

        Socket clientSocket = null;
        try {
            clientSocket = serverSocket.accept();
            logger.info("socket accepted");
        } catch (IOException e) {
            logger.info("Accept failed.");
            System.exit(1);
        }

        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(
                new InputStreamReader(
                clientSocket.getInputStream()));
        String inputLine, outputLine;
        KnockKnockProtocol kkp = new KnockKnockProtocol();

        outputLine = kkp.processInput(null);
        out.println(outputLine);

        while ((inputLine = in.readLine()) != null) {
             outputLine = kkp.processInput(inputLine);
             out.println(outputLine);
             if (outputLine.equals("Bye."))
                break;
        }
        out.close();
        in.close();
        clientSocket.close();
        serverSocket.close();
    }
}
当我启动“运行方式->在服务器上运行”时,它不起作用。我试着把它加入战争和部署,但结果都一样——没有。这意味着niether I可以使用另一个客户端应用程序(来自另一个eclipse实例)连接到它,也不会生成任何显示它工作的消息(仅访问tomcat生成的日志)。正如您所看到的,我向代码中添加了log4j,以查看证明代码实际在服务器上运行的任何消息(最初只有System.err和System.out),我尝试将其配置为控制台输出和文件输出

同样,服务器本身按预期运行—我可以通过浏览器、open manager应用程序、部署/取消部署应用程序等访问它

所以问题是:我做错了什么?我想我可能犯了一些原始的错误/未完成的步骤/任何事情,但在谷歌的帮助下,我无法在两天的战斗中找到答案

非常感谢您的帮助


更新:非常感谢各位!正如我所怀疑的-愚蠢的我:)我不知道为什么我开始和Tomcat搞得一团糟,但是的,运行应用程序很好。那些即时的回答节省了我很多时间。再次非常感谢。

您尝试使用主类打开套接字。您不应该在服务器上运行应用程序,应用程序将是服务器本身。单击运行方式>运行方式应用程序。

您试图打开一个带有主类的套接字。您不应该在服务器上运行应用程序,应用程序将是服务器本身。单击运行方式>运行方式应用程序。

我认为这里存在误解。Tomcat是一个servlet容器——它旨在运行由以下组件组成的web应用程序

您的
KnockKnockServer
是一个常规的Java应用程序,因此“在Tomcat上”运行它毫无意义。您应该将其作为独立应用程序运行


实际上,有时在运行于Tomcat的web应用程序中为某些特定协议启动服务器是有意义的。在这种情况下,您需要从
ServletContextListener
控制定制服务器的生命周期。但我不认为这是你的情况。

我认为这里有误解。Tomcat是一个servlet容器——它旨在运行由以下组件组成的web应用程序

您的
KnockKnockServer
是一个常规的Java应用程序,因此“在Tomcat上”运行它毫无意义。您应该将其作为独立应用程序运行


实际上,有时在运行于Tomcat的web应用程序中为某些特定协议启动服务器是有意义的。在这种情况下,您需要从
ServletContextListener
控制定制服务器的生命周期。但我不认为这是您的情况。

尝试将其作为java应用程序运行。不是作为web应用程序。它似乎不是Java Web应用程序

尝试将其作为Java应用程序运行。不是作为web应用程序。它似乎不是一个Java Web应用程序,Tomcat是一个servlet容器。用于运行web应用程序。您正在尝试在容器中运行java类,这是不可能的。尝试将其作为独立应用程序运行。

Tomcat是一个servlet容器。用于运行web应用程序。您正在尝试在容器中运行java类,这是不可能的。尝试将其作为独立应用程序运行