2015-03-11 2 views
0

Я создал программу-сокет sever, чтобы отправить данные потока в Apache-искра. Но данные получены светом после того, как я закрою сокет или завершение программы. Мне нужно отправить данные без закрытия сокета и программы завершения.Как отправить данные в программу java-сокета без закрытия сокета

import java.io.DataOutputStream; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.Scanner; 

public class SocketServer { 
public static void main(String[] args) { 
    try { 
     ServerSocket ss = new ServerSocket(9999); 
     Socket s = ss.accept();// establishes connection 

     DataOutputStream dout = new DataOutputStream(s.getOutputStream()); 
     Scanner scanner = new Scanner(System.in); 
     String s1 = ""; 
     while (!s1.equals("end")) { 
      s1 = scanner.next(); 
      dout.writeUTF(s1); 
      dout.flush(); 
     } 
    ss.close(); 
    } catch (Exception e) {r 
     System.out.println(e); 
    } 
    } 
} 

я могу посылать данные в потоке с помощью пса сервера пса -lk 9999.

EDIT -1 Пробовал с Println

try { 
     ServerSocket ss = new ServerSocket(6000); 
     Socket s = ss.accept();// establishes connection 

     OutputStream ostream = s.getOutputStream(); 
     PrintWriter pwrite = new PrintWriter(ostream, true); 
     Scanner scanner = new Scanner(System.in); 
     String s1 = ""; 
     while (!s1.equals("end")) { 
      s1 = scanner.next(); 
      pwrite.println(s1); 
      pwrite.flush(); 
     } 
     ss.close(); 
    } catch (Exception e) { 
     System.out.println(e); 
    } 

До сих пор не работает.

Пожалуйста, помогите ..

+0

Почему вы создаете экземпляр 'dout' на каждой итерации цикла? –

+0

Извините неправильный фрагмент .. – BlackPOP

+0

Хотя я флеш .. все еще данные не принимаются приемником искрового потока .. – BlackPOP

ответ

0

Если Apache Spark не является (a) написанным на Java и (b) вызывает readUTF(), вы используете неправильный метод для отправки. Вероятно, вы должны использовать метод println(). Вам также необходимо закрыть принятый сокет, а также сокет сервера.

+0

Позвольте мне попробовать ..! – BlackPOP

+0

его не работает..Я отредактировал мой вопрос. – BlackPOP

+0

Ваш текст говорит, что вы пытались использовать 'println(),' но ваш код показывает, что вы этого не сделали. Попробуй еще раз. – EJP

-2

Прежде всего, вы должны быть только инстанцировании DOUT один раз (до начала цикла в то время).

Во-вторых, я считаю, что он работает, так как при чтении из потока сокета он читается до тех пор, пока не будет достигнут конец потока (т.е. разъем закрыт). Чтобы закончить чтение раньше, вам нужно будет отправить «конец потока», не закрывая его.

+0

Как отправить «конец потока» ?? – BlackPOP

+0

@BlackPOP Выключите сокет для вывода. Но вы никогда не сможете отправить его снова. – EJP

+0

Я сделал это .. я попытался закрыть поток тоже .. не повезло .. – BlackPOP

Смежные вопросы