【问题标题】:How to create a basic Java Server? [closed]如何创建一个基本的 Java 服务器? [关闭]
【发布时间】:2011-01-12 08:35:00
【问题描述】:

本质上,我想要一个可以连接多个人的基本 Java 服务器,当其中一个连接的客户端(已经用 Obj-c 编码)向它发送数据时,它会将数据发送回给连接的每个人。

我是一个真正的 Java 新手,在可预见的未来我不会需要 Java 来做任何事情,所以我希望尽快摆脱它,而不是从头开始正确地学习 Java。因此,如果有人对此有一些源代码或教程,将不胜感激。

谢谢 :) 奥兹

【问题讨论】:

  • 客户端使用什么样的协议?
  • 投票重新开放 - 所以真的需要弄清楚如何处理可能有几个好答案的问题。

标签: java multithreading sockets


【解决方案1】:

这是一个简单的“Knock Knock”服务器,由 Sun 提供:

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

public class KnockKnockServer {
    public static void main(String[] args) throws IOException {

        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(4444);
        } catch (IOException e) {
            System.err.println("Could not listen on port: 4444.");
            System.exit(1);
        }

        Socket clientSocket = null;
        try {
            clientSocket = serverSocket.accept();
        } catch (IOException e) {
            System.err.println("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();
    }
}

没有比这更简单的了。

【讨论】:

  • 今天早些时候我确实快速浏览了一遍,我在 PHP 中编写了类似的代码,这对于早期的测试非常有用。目前虽然我正在寻找连接并发送给多个用户,但显然我需要多线程?你知道在你提供的例子中我会怎么做吗?
  • kieser.net/linux/java_server.html - 您只需创建一个处理连接的类并通过 thread() 调用它
  • 什么是KnockKnockProtocol
  • @GalenNare 在official tutorial 中有解释。您可能需要调整 tutorial class
【解决方案2】:

Sun 提供了一个简单的教程:

http://java.sun.com/developer/onlineTraining/Programming/BasicJava2/socket.html#server

它从上面的基本单线程开始,并根据需要扩展到使用多个。

【讨论】:

    【解决方案3】:

    尝试使用 Jetty 服务器 API。 http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty 看起来是个不错的起点...

    【讨论】:

    • 谢谢!我会看看!唯一的问题是我几乎没有任何 Java 知识,所以我发现很难理解他们的很多内容。我只需要一个 Java 服务器来演示我的客户端。虽然我实际上计划明年根据我正在学习的大学课程学习 Java!
    • 是的,它需要一些 Java 知识,尽管对于简单的基于 Web 的请求/响应场景来说可能非常简单。我认为 Nissan Fan 的回答更适合您的用例。
    • @IApp - 对于您描述的项目,我不建议使用任何框架(Jetty 是一个框架)。 KISS - 保持简短和简单。
    • 顺便说一句,目前,IDE 对 Web 服务器框架的支持很差。
    【解决方案4】:

    我做了一个 Java 程序,它基本上实现了客户端和服务器之间的一种聊天。使用套接字打开将听到传入连接的服务器端口。当有效连接进入时,您应该有一个线程听到它们并调用操作。

    【讨论】:

    • 是的,我设法让一个基本的 PHP 套接字服务器工作,但它一次只能连接 1 个客户端。除非是 Actionscript 或 Objective-C,否则我基本上迷路了!
    【解决方案5】:

    【讨论】:

      【解决方案6】:

      您可能需要使用serversocket 类。

      【讨论】:

      • 是的,我对此有所了解,但觉得很难理解。不过谢谢:)
      猜你喜欢
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 2017-07-25
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 2022-08-16
      相关资源
      最近更新 更多