2014-04-02 3 views
1

Привет, ребята Я создал простое приложение-чат, но я не могу подключиться к серверу для отправки и получения данных, вот часть моего кода:Проблема подключения к ServerSocket через Интернет

сторона

сервер:

import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.regex.Pattern; 

public class Listener { 

public static void start() { 
    try { 
     final ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); 
     serverSocketChannel.configureBlocking(true); 
     serverSocketChannel.socket().bind(new InetSocketAddress(GetConfigs.getServerListenerPort())); 
     final List<Operator> operators = new ArrayList<>(); 
     final int nOperators = 64; 
     for (int i = 0; i < nOperators; i++) { 
      operators.add(i, new Operator()); 
     } 
     final int parallelism = Runtime.getRuntime().availableProcessors(); 
     ForkJoinPool pool = new ForkJoinPool(parallelism); 
     pool.submit(() -> new Thread(() -> { 
      int i = 0; 
      while (true) { 
       try { 
        operators.get(i).newOperation(serverSocketChannel.accept()); 
        i++; 
        if (i == nOperators) { 
         i = 0; 
        } 
       } catch (IOException ignored) { 
       } 
      } 
     })).fork().invoke().start(); 
    } catch (IOException e) { 
     Logging.log.error(e); 
    } 
} 

стороне клиента:

import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.net.InetAddress; 
import java.net.Socket; 
import java.util.Arrays; 
import java.util.LinkedList; 
import java.util.regex.Pattern; 

public class ConnectServer { 

private static final String SERVER_ADDRESS = GetConfigs.getServerIPAddress(); 
private static final int SERVER_LISTENER_PORT = GetConfigs.getServerListenerPort(); 

private StringBuilder result = new StringBuilder(); 

private void connect() { 
    result.delete(0, result.length()); 
    try { 
     SocketChannel socketChannel = SocketChannel.open(); 
     socketChannel.configureBlocking(true); 
     if (socketChannel.connect(new InetSocketAddress(InetAddress.getByName(SERVER_ADDRESS), SERVER_LISTENER_PORT))) { 
      DataOutputStream dos = new DataOutputStream(socketChannel.socket().getOutputStream()); 
      DataInputStream dis = new DataInputStream(socketChannel.socket().getInputStream()); 
      dos.writeUTF("..."); 
      result.append(String.valueOf(dis.readUTF())); 
      dos.close(); 
      dis.close(); 
      socketChannel.close(); 
     } 
    } catch (IOException ex) { 
     //... 
    } 
} 

} 

Это делает работу на подключение к локальной сети.

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

+0

Вы в Prox y сеть? – Vishrant

+0

no ............. – AvB

+0

Он работает на подключении к локальной сети ... – AvB

ответ

0

появляется ли ошибка в клиенте или сервере приложения?

Может быть, это может помочь вам:

  • Отключить брандмауэр
  • Проверьте, если любое другое приложение использует порт (возможно, изменить порт)
  • Просто идея: Попробуйте без лямбда, это просто освобожден и иногда возникают ошибки (например, настойчивость)

с наилучшими пожеланиями

+0

В другом комментарии вы сказали, что он работает в локальной сети. Как сказал @ Вишрант, код не проблема. Что такое «между» вашим сервером и вашим клиентом? Вы открыли порт в своем маршрутизаторе? –

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