View Full Version : سوال: دریافت مقادیر از یک صفحه از سایت با کمک سوکت
  
ravand
جمعه 10 آذر 1391, 16:06 عصر
سلام
من میخوام برنامه ای با جاوا بنویسم که یه صفحه ای از سایت رو با استفاده از سوکت بهش متصل بشه و بعد اگه مقداری به اون سایت اضافه شده این برنامه ی جاوا بهم پیام بده.
شنیدم که سوکت میتونه کمکم کنه .
مثلا این صفحه ی منه:
http://site.ir/test.php
من نمیخوام از rss feeds کمک بگیرم. چون میخوام برنامه ی جاوای من به سرور متصل بشه و دقیقا همون موقع ای که صفحه به روز شد برنامه ی جاوا بهم پیام بده.
قبلا میخواستم از تایمر استفاده کنم ولی گفتم برای این کار برنامه ی جاوای من باید مدام به سرور سایت درخواست ارسال کنه. برای همین به این نتیجه رسیدم از سوکت استفاده کنم چون فقط یه درخواست به سایت ارسال میکنه و بعد منتظر میشه که با به روز شدن صفحه جواب درخواست براش ارسال بشه.
متشکرم.
spiderman200700
جمعه 10 آذر 1391, 18:59 عصر
سلام
شاید از این مثال بتونی کمک بگیری
http://stackoverflow.com/questions/183409/http-1-1-persistent-connections-using-sockets-in-java
ravand
جمعه 10 آذر 1391, 19: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, 22:14 عصر
من خودم تا حالا از این روش استفاده نکردم.
شما الآن مشکلت با این کد چیه؟ شاید بتونم مشکل رو یر طرف کنم
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.