PDA

View Full Version : سوال: دریافت مقادیر از یک صفحه از سایت با کمک سوکت



ravand
جمعه 10 آذر 1391, 15:06 عصر
سلام
من میخوام برنامه ای با جاوا بنویسم که یه صفحه ای از سایت رو با استفاده از سوکت بهش متصل بشه و بعد اگه مقداری به اون سایت اضافه شده این برنامه ی جاوا بهم پیام بده.
شنیدم که سوکت میتونه کمکم کنه .
مثلا این صفحه ی منه:

http://site.ir/test.php
من نمیخوام از rss feeds کمک بگیرم. چون میخوام برنامه ی جاوای من به سرور متصل بشه و دقیقا همون موقع ای که صفحه به روز شد برنامه ی جاوا بهم پیام بده.
قبلا میخواستم از تایمر استفاده کنم ولی گفتم برای این کار برنامه ی جاوای من باید مدام به سرور سایت درخواست ارسال کنه. برای همین به این نتیجه رسیدم از سوکت استفاده کنم چون فقط یه درخواست به سایت ارسال میکنه و بعد منتظر میشه که با به روز شدن صفحه جواب درخواست براش ارسال بشه.
متشکرم.

spiderman200700
جمعه 10 آذر 1391, 17:59 عصر
سلام
شاید از این مثال بتونی کمک بگیری
http://stackoverflow.com/questions/183409/http-1-1-persistent-connections-using-sockets-in-java

ravand
جمعه 10 آذر 1391, 18:52 عصر
متشکرم.
ولی چون من مبتدی هستم و این کد کامل نبود چیزی ازش سر در نیاوردم
package main;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.net.Socket;
import javax.net.SocketFactory;
import java.net.InetAddress;
import java.net.URL;
import java.io.*;
import java.net.*;
import java.io.*;
public class Main {

public static void main(String[] args) throws Exception {

try{
Socket connection = new Socket("localhost/test.php", 80);

PrintWriter out_writer = new PrintWriter(con_out, false);
out_writer.print("GET http://localhost/test.php HTTP/1.1\r\n");
out_writer.print("Host: thehost\r\n");
//out_writer.print("Content-Length: 0\r\n");
out_writer.print("\r\n");
out_writer.flush();

// If we were not interpreting this data as a character stream, we might need to adjust byte ordering here.
InputStreamReader isr_reader = new InputStreamReader(con_in);
char[] streamBuf = new char[8192];
int amountRead;
StringBuilder receivedData = new StringBuilder();
while((amountRead = isr_reader.read(streamBuf)) > 0){
receivedData.append(streamBuf, 0, amountRead);
}

// Response is processed here.

if(connection != null && !connection.isClosed()){
//System.out.println("Connection Still Open...");

out_writer.print("GET http://localhost/test.php\r\n");
out_writer.print("Host: somehost\r\n");
out_writer.print("Connection: close\r\n");
out_writer.print("\r\n");
out_writer.flush();

streamBuf = new char[8192];
amountRead = 0;
receivedData.setLength(0);
while((amountRead = isr_reader.read(streamBuf)) > 0 || amountRead < 1){
if (amountRead > 0)
receivedData.append(streamBuf, 0, amountRead);
}
}
// Process response here

} catch (Exception e) {
System.out.println(e);
}
}
}

spiderman200700
جمعه 10 آذر 1391, 21:14 عصر
من خودم تا حالا از این روش استفاده نکردم.
شما الآن مشکلت با این کد چیه؟ شاید بتونم مشکل رو یر طرف کنم