Я сделал несколько поисков, и похоже, что не удалось добиться успеха при установлении соединения сокетов tcp/ip через Coldfusion. Я пытаюсь действовать как простой клиент и отправлять строку и получать ответ. Adobe EventGateway для Adobe требует установки на стороне сервера, к которой я не могу прикасаться, но, похоже, только слушатель (согласно документу Adobe, «Он может отправлять исходящие сообщения существующим клиентам, но не может установить ссылку».).Простая связь со штекером TCP/IP с использованием ColdFusion
Существует еще один пример на SO/cflib.org, который является преобладающим сообщением над веб-сайтом, вызывающим объекты Java, но я не преуспеваю в этом, и, похоже, у всех есть проблемы с ним. В моих попытках я могу запустить его/соединить сокет, но ничего больше. Если я попытаюсь отправить строку, страница CF загрузится нормально, но серверная сторона, похоже, никогда ничего не увидит (но будет регистрировать или отмечать связь/отключение). Если я попытаюсь прочитать ответ, страница никогда не будет загружаться. Если я закрою сервер во время его попытки, он покажет сброс соединения при попытке readLine(). Я пробовал это с помощью собственного приложения, а также простой прослушиватель Java-сокетов, который будет отправлять сообщение на соединение и должен отсылать все отправленные сообщения.
Это просто не работа для CF? Если нет, любые другие простые предложения/примеры из области jQuery/Ajax?
Java слушателем приложение:
package blah;
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
class SocketServer extends JFrame
implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
JButton button;
JLabel label = new JLabel("Text received over socket:");
JPanel panel;
JTextArea textArea = new JTextArea();
ServerSocket server = null;
Socket client = null;
BufferedReader in = null;
PrintWriter out = null;
String line;
SocketServer(){ //Begin Constructor
button = new JButton("Click Me");
button.addActionListener(this);
panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setBackground(Color.white);
getContentPane().add(panel);
panel.add("North", label);
panel.add("Center", textArea);
panel.add("South", button);
} //End Constructor
public void actionPerformed(ActionEvent event) {
Object source = event.getSource();
if(source == button){
textArea.setText(line);
}
}
public void listenSocket(){
try{
server = new ServerSocket(4444);
} catch (IOException e) {
System.out.println("Could not listen on port 4444");
System.exit(-1);
}
try{
client = server.accept();
//Show connection status in text box, and send back to client
line = " Connected ";
out.println(line);
textArea.setText(line);
} catch (IOException e) {
System.out.println("Accept failed: 4444");
System.exit(-1);
}
try{
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
} catch (IOException e) {
System.out.println("Accept failed: 4444");
System.exit(-1);
}
while(true){
try{
//Try to concatenate to see if line is being changed and we're just not seeing it, show in textbox
line = line + " " + in.readLine();
textArea.setText(line);
//Send data back to client
out.println(line);
} catch (IOException e) {
System.out.println("Read failed");
System.exit(-1);
}
}
}
protected void finalize(){
//Clean up
try{
in.close();
out.close();
server.close();
} catch (IOException e) {
System.out.println("Could not close.");
System.exit(-1);
}
}
public static void main(String[] args){
SocketServer frame = new SocketServer();
frame.setTitle("Server Program");
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
frame.addWindowListener(l);
frame.pack();
frame.setVisible(true);
frame.listenSocket();
}
}
CF Simple Send (минус HTML заголовка/нижнего колонтитула, IP, чтобы быть жестко закодированы, порт простого слушателя = 4444):
<cfset sock = createObject("java", "java.net.Socket")>
<cfset sock.init("ip.ip.ip.ip", 4444)>
<cfset streamOut = sock.getOutputStream()>
<cfset output = createObject("java", "java.io.PrintWriter").init(streamOut)>
<cfset streamOut.flush()>
<cfset output.println("Test Me")>
<cfset output.println()>
<cfset streamOut.flush()>
<cfset sock.shutdownOutput()>
<cfset sock.close()>
Простой CF Чтение (опять же, шаблон минус верхнего/нижнего колонтитула, IP сервера, чтобы быть жестко закодированы, порт 4444)
<cfset sock = createObject("java", "java.net.Socket")>
<cfset sock.init("ip.ip.ip.ip", 4444)>
<cfset streamInput = sock.getInputStream()>
<cfset inputStreamReader= createObject("java", "java.io.InputStreamReader").init(streamInput)>
<cfset input = createObject("java", "java.io.BufferedReader").init(InputStreamReader)>
<cfset result = input.readLine()>
<cfset sock.shutdownInput()>
<cfset sock.close()>
Я попытался добавить сома e спит здесь и там, а также попробовал отправить, не используя PrintWriter/используя только ObjectOutputStream и writeObject(), но такое же поведение. Любая помощь будет принята с благодарностью. Благодаря!
Это то, что мне было интересно - если бы не было «чистого», «сделайте, пока вы не отправите/не получите что-то, а затем не уйдете», чтобы рукопожатие, поскольку контент по существу имеет один шанс загрузить. Я надеялся, что мне удастся «заставить время», возможно, сделав одно сообщение на одной странице за раз и поражая эту страницу столько раз, сколько необходимо, в отличие от другого динамического контента. Спасибо за ваш ответ! – user1144336
Если, например, вы создавали веб-страницу ColdFusion, которая запрашивала сервер Quake для старой игровой информации, вы могли бы заставить ее работать с некоторыми модами, тайм-аутами, задержками и т. Д. ... с тех пор запрос (по своей природе) - запрос-ответ, который подходит для Интернета (запрос на сервер, получение информации, отображение на экране, завершение). То, как кажущиеся в реальном времени веб-приложения имитируют это, - это постоянно пинговать сервер, проверка новой информации - и, в конце концов, на самом деле это не так сильно, как обновление веб-страницы снова и снова; не очень эффективно. –