gpt4 book ai didi

java - 在 java 中实现一个 xmpp 客户端 - 卡在第一步

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:54:36 24 4
gpt4 key购买 nike

我正在尝试编写一个 xmpp 客户端来从 gtalk 发送/接收消息。

在我真正开始实现之前,我想开发一个原型(prototype),看看我是否能够将消息传递给 gtalk。

我编写了以下代码,现在卡在了我应该在开始加密连接之前请求 google 的部分。

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class XmppConnect {
static String initiate_conn="<?xml version=\"1.0\"?>\n\r<stream:stream to=\"google.com\"\n\rversion=\"1.0\"\n\rxmlns=\"jabber:client\"\n\rxmlns:stream=\"http://etherx.jabber.org/streams\">\n";
static String start_tls="<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"/>";
public static void main(String [] args)
{
try {
Socket connection = new Socket("talk.google.com", 5222);
DataInputStream input = new DataInputStream(connection.getInputStream());
BufferedReader d = new BufferedReader(new InputStreamReader(input));
OutputStream to_server = null;
String responseLine;
to_server = connection.getOutputStream();
to_server.write(initiate_conn.getBytes());
responseLine = d.readLine();
System.out.println("Server: " + responseLine);
to_server.write(start_tls.getBytes());
responseLine = d.readLine();
System.out.println("Server: " + responseLine);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

}

我可以将以下内容发送给 google

<starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>

作为回应,我期待以下内容

<proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>

但是我没有从服务器返回任何东西。

wireshark 的屏幕截图如附件所示。

请求您的帮助,请不要告诉我使用现有的 xmpp 库,因为我不想这样做。

问候,马努!

Screenshot of WireShark

更新

已找到解决方案。工作代码如下:

目前可用的代码如下。

现在我将致力于 TLS 实现,如果有任何疑问,我会回到这里 :) :)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class XmppConnect {
static String initiate_conn="<stream:stream to=\"gmail.com\" version=\"1.0\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\">";
static String start_tls="<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"/>";
public static void main(String [] args)
{
try {
Socket connection = new Socket("talk.google.com", 5222);
DataInputStream input = new DataInputStream(connection.getInputStream());
BufferedReader d = new BufferedReader(new InputStreamReader(input,"UTF-8"));
BufferedWriter to_server = new BufferedWriter(
new OutputStreamWriter(connection.getOutputStream(),"UTF-8")
);
String responseLine="";
to_server.write(initiate_conn);
to_server.flush();
int in;
while(!(responseLine.contains("</stream:features>")))
{
responseLine += (char)d.read();
}
System.out.println("Server: " + responseLine);
to_server.write(start_tls);
to_server.flush();
responseLine="";
while(!(responseLine.contains("<proceed xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"/>")))
responseLine += (char)d.read();
System.out.println("Server: " + responseLine);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

最佳答案

检查 SMACK它为 Java 提供了一个很好的 XMPP 堆栈。它有据可查且易于使用。

关于java - 在 java 中实现一个 xmpp 客户端 - 卡在第一步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9039470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com