I einfache Server-Client-Anwendung zu machen versuche, die der Client eine Datei an den Server senden können dann sendet der Server Bestätigungsnachricht, dass sie die Datei empfangenJava-Socket-Verbindung zurückgesetzt
dies ist der Serverklasse.
public class Server {
public static void main(String[] args) {
try {
ServerSocket server=new ServerSocket(9090);
while(true){
Socket clientSocket=server.accept();
ClientThread client=new ClientThread(clientSocket);
client.start();
}
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
ClientThread Klasse
public class ClientThread extends Thread {
private Socket socket;// socket to connect through
private BufferedInputStream SocketInput;// stream to read from socket
private BufferedOutputStream FileOutput;// stream to write file through it
private PrintWriter SocketOutput; // print writer to write through socket
public ClientThread(Socket socket){// constructor
this.socket=socket;
}
public void run(){
try {
//get socket input stream
SocketInput=new BufferedInputStream(socket.getInputStream());
//get socket output stream
SocketOutput=new PrintWriter(socket.getOutputStream(),true);
// get the file from client
int NBytes=0;
byte[] data=new byte[1024];
FileOutput=new BufferedOutputStream(new FileOutputStream("C:/Users/mohamed/Desktop/Download/band.jpg"));
while((NBytes=SocketInput.read(data))!=-1){
FileOutput.write(data,0,NBytes);
FileOutput.flush();
}
// send ack. that file has been received
SocketOutput.println("File has been sent sucessfully");
//close all streams
FileOutput.close();
SocketInput.close();
SocketOutput.close();
socket.close();
}
catch (IOException e) {
System.out.println(e.toString());
}
}
}
Client-Klasse
public class Client {
public static void main(String[] args) {
// file will be sent
File f=new File("D:/images/band.jpg");
try {
// get address of local host
InetAddress serverAddress=InetAddress.getLocalHost();
//create socket
Socket socket=new Socket(serverAddress,9090);
// create streams
BufferedInputStream input=new BufferedInputStream(new FileInputStream(f));
BufferedOutputStream output=new BufferedOutputStream(socket.getOutputStream());
BufferedReader p=new BufferedReader(new InputStreamReader(socket.getInputStream()));
// send the file
byte[] data=new byte[1024];
int Nbytes=0;
while((Nbytes=input.read(data))!=-1){
output.write(data,0,Nbytes);
output.flush();
}
// read the ack. and print it
System.out.println(p.readLine());
//close streams & socket
p.close();
input.close();
output.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
, was ich, wenn ich den Server und den Client-i nichts bekam laufen, wenn ich den Client die Server-App-Typen stoppen in Die console exception connection reset, aber wenn ich den Teil der Bestätigung entferne die Datei empfangen und nichts schief geht, was ist das Problem?
Wenn Sie den Ausgabestream schließen, wird der Socket geschlossen, so dass die folgende 'readLine()' eine 'socket closed' Ausnahme erhält. – EJP