Datei senden Sie dann die Nachricht über socket

Ich bin versucht, senden Sie eine Datei von einem client an einen server. Der server empfängt die Datei und senden Sie dann eine Bestätigungs-Nachricht an den client.

Mein problem ist, dass der client reagiert nicht mehr, wenn er wartet die Bestätigung.

Server :

import java.net.*;
import java.io.*;

public class Server {
public static void main(String args[]) throws IOException {
        int port = 1234;
    ServerSocket server_socket;

    server_socket = new ServerSocket(port);
    System.out.println("Server waiting for client on port "
            + server_socket.getLocalPort());
    //server infinite loop
    while (true) {
        Socket socket = server_socket.accept();
        System.out.println("New connection accepted "
                + socket.getInetAddress() + ":" + socket.getPort());
    try {
                byte[] b = new byte[1024];
                int len = 0;
                int bytcount = 1024;
                String FileName = "C:\\test\\java\\tmp\\sentfile.pdf"; 
                FileOutputStream inFile = new FileOutputStream(FileName);
                InputStream is = socket.getInputStream();
                BufferedInputStream in2 = new BufferedInputStream(is, 1024);
                while ((len = in2.read(b, 0, 1024)) != -1) {
                    bytcount = bytcount + 1024;
                inFile.write(b, 0, len);
                }
                System.out.println("Bytes Writen : " + bytcount);

                //Sending the response back to the client.
                ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
                oos.flush();
                oos.writeObject("ok");
                System.out.println("Message sent to the client is "+"ok");

                in2.close();
                inFile.close();
            } catch (IOException e) {
        System.out.println("Unable to open file" + e);
        return;
    }
    socket.close();
    System.out.println("Connection closed by client");
        }
}
}

Client :

import java.net.*;
import java.io.*;

public class Client {
    public static void main(String[] args) throws UnknownHostException,
        IOException, ClassNotFoundException {

        int port = 1234;
    Socket socket = null;

    //connect to server
    socket = new Socket("127.0.0.1", port);

    try {
            byte[] buf = new byte[1024];
            OutputStream os = socket.getOutputStream();
            BufferedOutputStream out = new BufferedOutputStream(os, 1024);
            String file = "C:\\test\\java\\client\\source.pdf"; 
            FileInputStream in = new FileInputStream(file);
            int i = 0;
            int bytecount = 1024;
            while ((i = in.read(buf, 0, 1024)) != -1) {
                bytecount = bytecount + 1024;
            out.write(buf, 0, i);
            out.flush();
            }
            System.out.println("Bytes Sent :" + bytecount);

            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            String confirmation = (String) ois.readObject();
            System.out.println("from server : " + confirmation);

            out.close();
            in.close();
    } catch (IOException e) {
    System.out.println(e);
    }
    socket.close();
}
}
Kann sein das du nicht Spülen Sie den Ausgabestrom von der server-Seite? Sehen Sie die Meldung: Message sent to the client is ok?
werde Kommentar auf der uresponsive Teil. Wenn der client wartet auf eine Antwort (Antwort Lesen) dann denke ich, dass es nicht mehr reagiert. Haben Sie überlegt, die Anfrage in einem separaten thread?
auf der client-Seite, es ist blockiert, nachdem "Bytes Gesendet:..". wenn ich den Kommentar der erste Teil, es funktioniert. Wenn ich kommentieren den zweiten Teil, es funktioniert. Beides ist nicht funktioniert nicht.
Und auf der server-Seite, es ist nicht schreiben "byte geschrieben:...". Aber Wenn der seconde Teil ist ein Kommentar, funktioniert es perfekt.
Ihr code kann nicht kompiliert werden, nach einem einfachen kopieren/einfügen. Wenn Sie möchten, etwas Hilfe zu bekommen, fügen Sie SSCCE Stil-code hier. Machen Sie nicht uns Ihre routine.

InformationsquelleAutor ophelie88 | 2011-06-30

Schreibe einen Kommentar