Новый сокет для клиента для отправки файла на сервер - PullRequest
2 голосов
/ 25 апреля 2011

У меня есть клиент, который отправляет файл на сервер и отправляет другие значения на сервер. Мне удалось передать файл, но он не открывается, пока я не закрою сокет. Поэтому я создал другой сокет на стороне клиента только для отправил файл, но сервер прочитал его, как будто это другой клиент, и увеличил число клиентов, а также дал мне исключение, сказав> Socketexception: программное обеспечение вызвало прерывание соединения: ошибка записи в сокет. Вот код клиентской стороны с новым сокет только для отправки, кто-нибудь может мне помочь по этому поводу? Спасибо заранее.

try
{
    Socket sendSock=new Socket("localhost", 8080);
    outC.println("AcceptFile,");
    FileInputStream fis = new FileInputStream(p);
    byte[] buffer = new byte[fis.available()];
    fis.read(buffer);
    ObjectOutputStream oos = new ObjectOutputStream(sendSock.getOutputStream()) ;
    oos.writeObject(buffer);
    sendSock.close();
}
catch(Exception c)
{
    System.err.println("exc" + c);
}

Ответы [ 2 ]

1 голос
/ 25 апреля 2011

tl; dr - не делайте новую розетку.Просто оберните выходной поток и отправьте объекты поверх.

Предполагая, что outC также является соединением с вашим сервером, сделайте это

outC.println("AcceptFile,");
FileInputStream fis = new FileInputStream(p);
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
ObjectOutputStream oos = new ObjectOutputStream(originalSocket.getOutputStream());
oos.writeObject(buffer);

Это запишет объект в базовый поток.

Теперь на стороне сервера вы можете сделать это

if(clientMessage.equals("AcceptFile,")) {
    ObjectInputStream ois = new ObjectInputStream(clientSocket.getInputStream());
    byte[] buffer = (byte[])ois.readObject();
    // do what you will with that
}
0 голосов
/ 25 апреля 2011

Проблема в поддержке нескольких соединений на стороне сервера. Я не понимаю, как вы собираетесь решить это поведение сервера со стороны клиента. Он не поддерживает несколько соединений в одном сеансе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...