Как использовать сокет в Java - PullRequest
2 голосов
/ 31 марта 2011

У меня возникли проблемы с использованием сокетов в Java.Я создаю приложение, которое постоянно нуждается в отправке данных на сервер.Данные отправляются через сокет от клиента.Я использую следующий код:

serverAddr = InetAddress.getByName(ipAddress);

while(send)
{
    soc=new Socket(serverAddr,8210);
    outStream=soc.getOutputStream();
    outStream.write(data);
    outStream.close();
}

Приведенный выше код работает нормально, и с этим нет проблем.Здесь я создаю новый объект Socket в каждом цикле, и я думаю, что это не очень хороший метод реализации.Как я могу отправить данные на сервер, используя один Socket?(Я не хочу создавать новый объект в каждом цикле)

А вот код сервера, который я написал на C #:

while (true)
{
    Socket s = listener.AcceptSocket();
    NetworkStream ns = new NetworkStream(s);
    int d;
    while ((d = ns.ReadByte()) >= 0)
    {
        //Process data here
    }
    s.Close();
}

И какие изменения мне нужныделать на стороне сервера?

Спасибо

1 Ответ

2 голосов
/ 31 марта 2011

Помните, что создание нового объекта сокета также создаст новое TCP-соединение.Если вы хотите использовать одно соединение, сохраните выходной поток.Вам нужно будет рассмотреть возможность очистки исключений, а также может потребоваться дополнительный уровень для восстановления, если между ними имеется временный сбой сети.

serverAddr = InetAddress.getByName(ipAddress);


soc=new Socket(serverAddr,8210);
try {
    outStream=soc.getOutputStream();
    while(send)
    {
        outStream.write(data);
    } 
    outStream.close();
} finally {
    soc.close();
}

Для серверной части: ваш код в основномправильно, но вы также должны рассмотреть возможность очистки (используйте using), и, как отмечает Марк Гравелл, вы должны быть уверены, что сможете найти границы сообщений при использовании одного TCP-соединения.

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