2015-05-15 5 views
0

У меня есть программа сокета-сервера, работающая на удаленной машине, я хочу отправлять данные через программу-клиентский сокет, не создавая новое соединение сокета каждый раз. До тех пор, пока серверный сокет открыт, мне просто нужно отправить данные. Для этого был использован Java-код. Это код im, который в настоящее время используется Работает нормально в первый раз. В следующий раз я запустил его, он говорит, что соединение отказано.Отправлять данные на открытый серверный сокет

String host = "machinename"; 
    int port = 23000; 
    InetAddress address = InetAddress.getByName(host); 
    //establish a socket connection with server 
    socket = new Socket(address, port); 
    //send msg to server 
    OutputStream os = socket.getOutputStream(); 
    OutputStreamWriter osw = new OutputStreamWriter(os); 
    BufferedWriter bw = new BufferedWriter(osw); 
    String request = "data"; 

    String sendMessage = request + "\n"; 
    bw.write(sendMessage); 
    bw.flush(); 
    InputStream is = socket.getInputStream(); 
    InputStreamReader isr = new InputStreamReader(is); 
    BufferedReader br = new BufferedReader(isr); 
    String message = br.readLine(); 
+1

Если вы не хотите создавать новое соединение сокета каждый раз (как это, вероятно, логично), вам необходимо сохранить исходное соединение открытым. Существует множество сетевых обучающих программ, которые покажут вам правильный способ выполнения сокетов. – Kayaman

ответ

-1

добавить:

socket.setKeepAlive (истина);

После вашего:

гнездо = ​​новый сокет (адрес, порт);

+0

Keepalive не имеет ничего общего с «отключенным соединением». – EJP

0

Второй раз, когда я запускаю его, он говорит, что соединение отклонено.

Это может означать только то, что ваш сервер , код которого вы еще не писал здесь, закрыл сокет после обработки одного клиента.

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