il client arriva fino a "sono qui" e poi attende
ho provato:
clientSocket.setKeepAlive(true); clientSocket.setSoTimeout(1); per non far cade la connessione quando facciuo un close ma niente
anche a sostituire printwriter con bufferedwriter... perché un amico usa queste classe e se chiude gli stream la connessione non cade.... lui però per connettersi usa:
//URL url = new URL("http://localhost:9999");
//HttpURLConnection client=(HttpURLConnection) url.openConnection();
//client.setDoOutput(true);
ma niente ....
questo è il client
package com.mastrosoft.myapplication;
// EchoClient.java
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.net.*;
import java.io.*;
public class EchoClient {
public static void main(String[] args) throws IOException {
Event messsage= new Event("08/12/2017","Bologna","Discodiscotecateca","100",2);
BufferedReader in = null, stdIn = null;
BufferedWriter printwriter = null;
Socket client = new Socket("192.168.203.20", 9999);
client.setKeepAlive(true);
//URL url = new URL("http://localhost:9999");
//HttpURLConnection client=(HttpURLConnection) url.openConnection();
//client.setDoOutput(true);
System.out.println("connesso");
String command="AddNewEvent";
if (command.matches("AddNewEvent")) {
//System.out.println("AddNewEvent req");
//json
try {
printwriter = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
System.out.println("Creato writer");
JSONObject object = new JSONObject();
try {
object.put("Location", messsage.getLocation());
object.put("Idea", messsage.getIdea());
object.put("Budget", messsage.getBudget());
object.put("Id_img", messsage.getId_img());
object.put("cmd", command);
object.put("com", null);
System.out.println("Inviato evento");
} catch (Exception e) {
e.printStackTrace();
}
printwriter.write(object.toJSONString());
printwriter.newLine();
printwriter.flush();
System.out.println("chiuso stream");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
command="ShowEvents";
if (command.matches("ShowEvents")) {
System.out.println("ShowEvents req");
try{
printwriter = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
System.out.println("Creato writer");
//json
JSONObject object = new JSONObject();
try {
object.put("Location", "NaN");
object.put("Idea", "NaN");
object.put("Budget", 0);
object.put("Id_img", 0);
object.put("cmd", command);
object.put("com", null);
} catch (Exception e) {
e.printStackTrace();
}
//Bufferedwriter
printwriter.write(object.toJSONString());
printwriter.newLine();
printwriter.flush();
//printwriter.close();
System.out.println("inviato eventofittizio");
// printwriter = new PrintWriter(client.getOutputStream(), true);
JSONParser parser = new JSONParser();
Object obj2=null ;
InputStreamReader isr = new InputStreamReader(client.getInputStream());
BufferedReader iin = new BufferedReader(isr);
System.out.println("sono qui");
System.out.println("echo: " + iin.readLine());
//printwriter.write(1);
//printwriter.flush();
while(obj2==null) {
obj2 = parser.parse(new InputStreamReader(client.getInputStream()));// la coda non viene ricevuta!!!! prova wait e notify
}//si chiude la connessione per questo non riceve un cazzo socketisclosedexception!
JSONObject json = (JSONObject) obj2;
System.out.println("str rcvd: " + json);
Event RCVDmesssagetmp=new Event();
RCVDmesssagetmp.setLocation((String) json.get("Location"));
RCVDmesssagetmp.setIdea((String) json.get("Idea"));
RCVDmesssagetmp.setBudget(Integer.parseInt(json.get("Budget").toString()));
RCVDmesssagetmp.setId_img(Integer.parseInt(json.get("Id_img").toString()));
String cmd = (String) json.get("cmd");
System.out.println("RCVD COMMAND: " + cmd);
}catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
printwriter.close();
client.close();
}
}
e questo è il server
package com.mastrosoft.myapplication;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
/**
* Created by Alessandro on 11/12/2017.
*/
public class SkeletonThread extends Thread {
private IGestore skeleton;
private Socket clientSocket;
private Event eee;
private CodaEvents ccc;
public SkeletonThread(IGestore _skeleton, Socket _socket){
this.skeleton=_skeleton;
this.clientSocket=_socket;
InetAddress address = clientSocket.getInetAddress();
String client = address.getHostName();
int porta = clientSocket.getPort();
System.out.println("In chiamata Client: "+ client + " porta: " + porta);
System.out.println("Connection accepted: "+ clientSocket);
}
public void run(){
try{
JSONParser parser = new JSONParser();
clientSocket.setKeepAlive(true);
clientSocket.setSoTimeout(1);
InputStreamReader ISR = new InputStreamReader(clientSocket.getInputStream());
BufferedReader IN = new BufferedReader(ISR, 1);
Object obj = parser.parse(IN); // implementa un meccanismo di lettura che legge finché non è = END
JSONObject json = (JSONObject) obj;
System.out.println("str rcvd: " + json);
eee =new Event();
eee.setLocation((String) json.get("Location"));
eee.setIdea((String) json.get("Idea"));
eee.setBudget(Integer.parseInt(json.get("Budget").toString()));
eee.setId_img(Integer.parseInt(json.get("Id_img").toString()));
String cmd=(String) json.get("cmd");
System.out.println("RCVD COMMAND: " + cmd);
String com=(String) json.get("com");
System.out.println("RCVD COM: "+com);
if (cmd.matches("AddNewEvent")){
Boolean Esito=skeleton.AddNewEvent(eee);
System.out.println("Event added...");
OutputStreamWriter osw = new OutputStreamWriter(clientSocket.getOutputStream());
osw.write(Esito.toString());
System.out.println("EchoServer operation: " + Esito.toString());
System.out.println("connessione chiusa");
}
if (cmd.matches("ShowEvents")) {
System.out.println("chiamo server...");
ccc = skeleton.ListEventAvailable();
ccc.listcoda();
PrintWriter printwriter = new PrintWriter(clientSocket.getOutputStream(), true);
InputStreamReader isr = new InputStreamReader(clientSocket.getInputStream());
BufferedReader in = new BufferedReader(isr);
System.out.println("Sending Events...");
//for (int i = 0; i<ccc.length ; i++) {
Event messsage = ccc.estrai();
//json
JSONObject object = new JSONObject();
try {
object.put("Location", messsage.getLocation());
object.put("Idea", messsage.getIdea());
object.put("Budget", messsage.getBudget());
object.put("Id_img", messsage.getId_img());
object.put("Esito", "TRUE");
} catch (Exception e) {
e.printStackTrace();
}
boolean Esito=false;
//while(in.read()!=1) {
printwriter.write(object.toJSONString());
System.out.println(object.toJSONString());
printwriter.flush();
//}
//}
System.out.println("Events Sent...");
// OutputStreamWriter osw = new OutputStreamWriter(clientSocket.getOutputStream());
// osw.write(Esito.toString());
// System.out.println("EchoServer operation: " + Esito.toString());}
//clientSocket.close();
System.out.println("connessione chiusa");
}
}catch (Exception e) {
e.printStackTrace();
}
}
}