Staram się odebrać dane z strony http://openweathermap.org/api
Zgodnie z instrukcją http://openweathermap.org/api zarejestrowalem się na strone, pobralem klucz i dodalem go jako atrybut url
Na początku chciałem zrobić to jak najbardziej surowo:


	public String getWeather(String miasto){
		Socket soc = null;
		PrintWriter writer = null;
		BufferedReader reader = null;
		
		try {
			soc = new Socket(InetAddress.getByName("api.openweathermap.org"), 80);
			System.out.println(soc.isConnected());
			writer = new PrintWriter(soc.getOutputStream());
			reader = new BufferedReader(new InputStreamReader(soc.getInputStream()));
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		System.out.println(miasto);
		writer.print("GET /data/2.5/weather?q=Warsaw&APPID=1e90436c71c53276dbcc2e72e5a15a60 HTTP/1.1\r\n");
		writer.print("Host: api.openweathermap.org\n\r\n");
		// ("api.openweathermap.org/data/2.5/weather?q=" + miasto+"&APPID=1e90436c71c53276dbcc2e72e5a15a60");
	    writer.flush();
	    
	    String txt = "";
	    try {
	    	int counter = 1;
			while((txt = reader.readLine()) != null) {
				System.out.println(counter++ + ": "+ txt);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		};
		
		writer.close();
		try {
			reader.close();
		    soc.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

i gdy testuje to dziala lecz zatrzymuje się w lini 11 i po jakiś 30 sekundach zwraca dopiero linie z JSON-em.

consola:

true
Warsaw
1: HTTP/1.1 200 OK
2: Server: openresty
3: Date: Sun, 01 Apr 2018 08:53:00 GMT
4: Content-Type: application/json; charset=utf-8
5: Content-Length: 516
6: Connection: keep-alive
7: X-Cache-Key: /data/2.5/weather?APPID=1e90436c71c53276dbcc2e72e5a15a60&q=warsaw
8: Access-Control-Allow-Origin: *
9: Access-Control-Allow-Credentials: true
10: Access-Control-Allow-Methods: GET, POST
11:                                  //tu program zatrzymuje się i od kilkunastu do kilkudziesięciu sekundach oczekiwania  zwraca JSON-a
12: {"coord":{"lon":21.01,"lat":52.23},"weather":[{"id":300,"main":"Drizzle","description":"light intensity drizzle","icon":"09d"},{"id":701,"main":"Mist","description":"mist","icon":"50d"}],"base":"stations","main":{"temp":279.15,"pressure":991,"humidity":93,"temp_min":279.15,"temp_max":279.15},"visibility":2500,"wind":{"speed":6.7,"deg":270},"clouds":{"all":90},"dt":1522571400,"sys":{"type":1,"id":5374,"message":0.0023,"country":"PL","sunrise":1522555813,"sunset":1522602618},"id":756135,"name":"Warsaw","cod":200}

Moje pytanie to dlaczego? jak to naprawić z uyciem socketu?
i jak to zrobi najefektywniej korzystajc z JAVA SE