2016-08-31 2 views
0

Я пытаюсь изучить Java Network Programming, но я сталкиваюсь с некоторыми препятствиями. Я уже написал сервер и клиент, но каждый раз, когда я пытаюсь их подключить, я мгновенно получаю закрытую ошибку соединения. Затем я попытался отредактировать его, но теперь я получаю сообщение об ошибке отказа. Отказавшись от этого, я решил работать на очень простом сервере, чтобы проверить основы Sockets и ServerSockets. Делая это, я пришел с этими двумя классами:Java SocketServer принимает вход от клиента Socket, но клиент Socket не получает входные данные от SocketServer

import java.net.InetAddress; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.io.*; 

public class SimpleServer { 
    public static void main(String[] args) throws Exception { 
     System.out.println("hey there"); 
     ServerSocket server = new ServerSocket(50010); 
     Socket socket = server.accept(); 
     System.out.println("Connection at " + socket); 

     InputStream in = socket.getInputStream(); 
     int c = 0; 
     while ((c = in.read()) != -1) { 
      System.out.print((char)c); 
     } 


     OutputStream out = socket.getOutputStream(); 
     for (byte b : (new String("Thanks for connecting!")).getBytes()) { 
      out.write(b); 
      out.flush(); 
     } 

     in.close(); 
     out.close(); 
     socket.close(); 
     server.close(); 
    } 
} 

и

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

public class SimpleClient { 
    public static void main(String[] args) throws Exception { 
     System.out.println("Attempting connection"); 
     Socket s = new Socket("130.49.89.208", 50010); 
     System.out.println("Cool"); 

     OutputStream out = s.getOutputStream(); 
     for (byte b : (new String("Hey server\r\nThis message is from the client\r\nEnd of message\r\n")).getBytes()) { 
      out.write(b); 
      out.flush(); 
     } 

     InputStream in = s.getInputStream(); 
     int c = 0; 
     System.out.println("this message will print"); 
     while ((c = in.read()) != -1) { 
      System.out.print((char)c); 
      System.out.println("this does not print"); 
     } 

     out.close(); 
     in.close(); 
     s.close(); 
    } 
} 

Сервер получает сообщение клиента прекрасно, но тогда, когда это поворот сервера, чтобы написать клиенту , все просто блокирует.

выход Сервера: Выход

-java SimpleServer 
----hey there 
----Connection at Socket[addr=/130.49.89.208,port=59136,localport=50010] 
----Hey server 
----This message is from the client 
----End of message 

клиента:

-java SimpleClient 
----Attempting connection 
----Cool 
----this message will print 

клиент и сервер и работать на моем ноутбуке на соединение локальных сетей в подключение к Интернету университета, если это помогает.

ответ

1

Согласно Javadocs, то InputStream.read() описывается как:

Если ни один байт не доступен, потому что конец потока был достигнут, значение возвращается -1. Этот метод блоки до доступны входные данные, обнаружен конец потока или выбрано исключение.

В вашем случае единственная возможность разбить цикл while - это когда клиент закрывает соединение, что приводит к концу потока.

Ожидается, что вы закодировали!

0

Ваш код сервера застрять здесь и, таким образом, никогда не писать обратно клиенту

while ((c = in.read()) != -1) { 
     System.out.print((char)c); 
    } 
Смежные вопросы