Hallo zusammen, habe ein problem und hoffe das jemand von euch mir mal wieder eine hilfe stellung geben kann.
folgendes szenario.
Client wurde gestartet.
client besitzt eine funktionen sendFileVector()
-in dieser funktion wird ein vector<Files> v übergeben
-und auf jedes file wird eine prozedure auf dem server angewandt
ablauf dieser funktion
i<v.getsize
sendfilenametoServer(v.get(i).getname)
sendefiletoserver(v.get(i))
getresultfromServer() :String
i++
normalerweise macht er dann auch den ersten durchlauf für den ersten vector , rufe ich nun aber einen zweiten vector auf(nicht paralel sondern nachdem der erste abgearbeitet ist bleibt er beim read inputstream stecken).
hier mal meine klasse zum (nur der client) zum anschauen vileicht wisst ihr ja was ich falsch mache finde niemanden der mir auch nur einen ansatzt geben konnte.wenn jemand bereit wäre sich den ablauf anzuschauen dann würde ich auch die server klasse posten.ist nicht viel denke das das nur eine kleinigkeit ist.
folgendes szenario.
Client wurde gestartet.
client besitzt eine funktionen sendFileVector()
-in dieser funktion wird ein vector<Files> v übergeben
-und auf jedes file wird eine prozedure auf dem server angewandt
ablauf dieser funktion
i<v.getsize
sendfilenametoServer(v.get(i).getname)
sendefiletoserver(v.get(i))
getresultfromServer() :String
i++
normalerweise macht er dann auch den ersten durchlauf für den ersten vector , rufe ich nun aber einen zweiten vector auf(nicht paralel sondern nachdem der erste abgearbeitet ist bleibt er beim read inputstream stecken).
hier mal meine klasse zum (nur der client) zum anschauen vileicht wisst ihr ja was ich falsch mache finde niemanden der mir auch nur einen ansatzt geben konnte.wenn jemand bereit wäre sich den ablauf anzuschauen dann würde ich auch die server klasse posten.ist nicht viel denke das das nur eine kleinigkeit ist.
Java:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.StringTokenizer;
import java.util.Vector;
import javax.swing.JOptionPane;
public class NewClientServerCon implements Runnable {
// -------------------------------------------------------------------------KlassenVariablen--------------
String serverName;
String FileName="deafult";
Thread cleintThread = new Thread(this);
File file;
int port;
HashMap<String,String> resultMap=new HashMap<String,String>();
Vector<File> caseFiles=null;
Socket socket;
String fileName;
Vector<File> files=null;
int filescnt=0;
InputStream fileinputStream = null;
DataOutputStream dos=null ;
DataInputStream dis=null;
boolean isDone=false;
int cnt=0;
int actcaseid=0;
// -----------------------------------------------------------------------------KONSTRUKTOR--------------
public NewClientServerCon(String serverName,int port)
{
this.serverName=serverName;
this.port=port;
initServerConnection();
System.out.println("NEWCLIENT KONSTRUKTOR END");
}
// -----------------------------------------------------------------------------OKERRORDIALOG------------
public void okErrorDialog(String message,String title)
{
JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE);
}
// ------------------------------------------------------------------------------INITSERVER---------------------
public boolean initServerConnection()
{
try
{
socket=new Socket(serverName,port);
dos = new DataOutputStream (socket.getOutputStream());
dis=new DataInputStream (socket.getInputStream());
System.out.println("initSERVERCON end");
return true;
}
catch (UnknownHostException e) {okErrorDialog("host not found.!\nPlease check settings","connection failed!");e.printStackTrace();return false;}
catch (IOException e) {okErrorDialog("Connection to server failed.\nPlease restart and try again","connection failed!");e.printStackTrace();return false;}
catch(Exception e){okErrorDialog("Connection to server failed.\nPlease restart and try again","connection failed!");e.printStackTrace();return false;}
}
// ----------------------------------------------------------------------------isATTCONNECTED-----------------
public boolean isConnected()
{
if(this.socket.isConnected())return true;
else return false;
}
// --------------------------------------------------------------------------------DOCASE()---------------------
public void setTestval(Vector<File> v, int caseID)
{
this.caseFiles=v;
this.actcaseid=caseID;
}
/*
* liefert null wenn nicht connected oder wenn ein file nicht existiert ansonsten immer die resultMap
* */
public synchronized HashMap<String,String> doCase()
{
System.out.println("DO CASE STARTET");
boolean failexist=false;
int cid=this.actcaseid;
HashMap<String,String> resultMap=new HashMap<String,String>();
if(this.caseFiles==null)
{
return null;
}
if(!isATTConnected())
{
okErrorDialog("Client is not connected to Server.\nPlease connect and retry", "Connection missing");
return null;
}
else if(isConnected())
{
for(int i=0;i<this.caseFiles.size();i++)
{
if(!new File(this.caseFiles.get(i).getAbsolutePath()).exists())
{
okErrorDialog("one ore more files for this case doesnt exist caseID "+cid, "File not found");
return null;
}
}
//beginne nun die procedure wenn alles in ordnung war
for(int j=0;j<this.caseFiles.size();j++)
{
System.out.println("CLIENT->sendingInformation>>>>");
failexist=sendInformation(this.caseFiles.get(j).getName(),"CMD",""+this.caseFiles.size());
System.out.println("CLIENT->Information send<");
failexist=send(this.caseFiles.get(j), ""+cid);
if(failexist){break;}
String resultforCase=getResult();
System.out.println("before tokeniz result show"+resultforCase);
if(resultforCase!=null && resultforCase.contains(","))
{
StringTokenizer st=new StringTokenizer(resultforCase,",");
String keyid=st.nextToken();
String keyVal=st.nextToken();
resultMap.put(keyid, keyVal);
}else return null;
}
}
return resultMap;
}
// -----------------------------------------------------------------------------SENDINFORMATION-------------------
private boolean sendInformation(String FileName, String cmd,String filecnt) {
try {
dos.writeUTF(FileName + "," + cmd+","+filecnt);
System.out.println("Client write information.....end");
return true;
// dos.flush();
} catch (IOException e)
{
System.out.println("Send Information Fehler");
e.printStackTrace();
return false;
}
}
// ------------------------------------------------------------------------SENDFILE probiere fileinputStream leeren---
private synchronized boolean send(File f, String caseID)
{
if (socket == null)
{
okErrorDialog("Client is not connected.Please connect and try\nagain.", "Connection failed");
return false;
}
if(f==null||!f.exists())
{
okErrorDialog("One or more files for case doesnt exists!.\n caseID "+caseID, "File not found");
return false;
}
System.out.println("sending File...."+f.getName());
byte[] buffer = new byte[16384];
try {
fileinputStream = new FileInputStream(f);
while (fileinputStream.available() > 0)
{
dos.write(buffer, 0, fileinputStream.read(buffer));
}
dos.flush();
// fileinputStream.close();
System.out.println("send!!");
return false;
}
catch (FileNotFoundException e)
{
System.out.println("FILENOTFOUND in sendFile");
e.printStackTrace();
return true;
}
catch (IOException e)
{
System.out.println("IO in sendFile");
e.printStackTrace();
return true;
}
}
// --------------------------------------------------------------------------setcaseFiles--------------
public void setcaseFiles(Vector<File> v)
{
this.caseFiles=v;
}
// --------------------------------------------------------------------------getRESULT--------------
/*
* Wenn ein resultat kommt dann return im format caseID als key, resultat as
* string an aufruf stelle tokenizen
* */
public String getResult()
{
try
{
// dis.notifyAll();
String result = dis.readUTF();
System.out.println("getResult for file="+result);
System.out.println(result);
if(result!=null)
{
return result;
}
else result=null;
}
catch (IOException e)
{
e.printStackTrace();}
return null;
}
// -----------------------------------------------------------------------------------------------------
@Override
public void run()
{
doCase();
}
}
Zuletzt bearbeitet: