java - java中如何通过socket向服务器发送登录信息

标签 java sockets networking authentication messenger

我正在尝试编写一个即时消息,它有一个客户端应用程序和一个服务器应用程序,它们应该在每个客户端上单独运行计算机和服务器。 当然,客户端通过 socket 相互通信。 我将每个客户端的信息保存在服务器上。这意味着客户端的应用程序应该将登录信息发送到服务器并等待听到结果。 我想知道将信息发送到服务器的最佳方式是什么?我应该通过同一个socket发送它还是什么?

最佳答案

套接字编程是java中一个有趣的话题。它可以使用两种主要方法来编写即时通讯程序。

我假设您知道如何对套接字进行编程并使用它的数据流。我只提供了即时通讯登录的逻辑。

<强>1。服务器-客户端方法

它需要两个不同的程序,例如客户端应用程序和服务器应用程序。只能使用此方法进行服务器端用户登录。可以传输由 json 或 xml 编码的数据。接收到的数据解码为对象。然后就可以识别该数据是服务器的消息还是登录信息。考虑以下示例。

  • 创建要传输的数据对象

传输数据类{

    private String userName;//user name of sender
    private String password;//password of the sender
    private String toUser;//user name of receiver
    private String type;//message type which is a message or login information
    //message types
    public static final String MESSAGE = "MESSAGE";
    public static final String LOGIN_INFORMATION = "LOGIN_INFORMATION";

    public TransmitData() {
    }

    //add getters and setters here

}
  • 然后转成xml或json字符串

    <transmit-data> <user-name></user-name> <password></password> <to-user></to-user> <message-type></message-type> </transmit-data>

  • 之后通过套接字连接发送 xml 数据

  • 在服务器上解码消息

  • 识别消息类型并执行后续操作

但是,当服务器离线时,服务器-客户端即时通讯程序将无法使用。所以不建议在局域网中使用。

<强>2。点对点方法

点对点实例消息传递程序只有一个程序,其中包含服务器和客户端编码。使用服务器端用户登录,开发困难且不符合逻辑。但您可以轻松地将客户端登录添加到Messenger。可以添加搜索功能并将其他用户添加到地址簿。那么我在使用的时候就会变得更聪明。它的优点是不需要服务器。我认为在局域网中使用即时通讯工具非常好。

关于java - java中如何通过socket向服务器发送登录信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32787386/

相关文章:

python - 在 python 中捕获 "socket.timeout The read operation timed out"

java - 通知多个 Java 小程序/应用程序服务器上的更改的最佳方法

C++ 套接字发送结构

Java:从显示 ArrayList 的 Stringbuffer 中删除括号和逗号

java - Spring Cloud 流卡夫卡流DLQ

java - 在 ListView 中添加复选框的问题

java - 找不到元素 "context:property-placeholder"的声明

c - 监听两个不同端口的 TCP 服务器

java - 在 Java 中通过 Socket 发送鼠标坐标

docker - Traefik/SSL/LetsEncrypt 故障