2016-02-11 4 views
-2

Я делаю клиент для клиентского приложения для общения в Java, и я хотел знать, как я могу создавать сокеты по требованию. В частности, я хотел знать, есть ли какой-либо метод, который проверяет наличие входящего соединения. Используя это, я мог бы одновременно использовать два метода вместе с Threads одним методом, ожидающим соединения, тогда как другой обрабатывает сервер (отправляемые сообщения). Это прекрасная стратегия или я должен использовать другую технику?Как создать сокеты по требованию в Java?

Что делать, если я использовал Socket Array и добавил к нему новое гнездо с каждым соединением? Может ли возникнуть проблема при обращении к сокетам позже?
У меня есть & & ничего, поскольку я хочу добавить туда метод, который поможет мне проверить, есть ли входящее соединение или нет.

import java.util.*; 
import java.io.*; 
import java.net.*; 
public class Server { 
public static ServerSocket SSock; 
public static Socket Sock; 
public static DataInputStream dis; 
public static DataOutputStream dos; 
public static PrintWriter pw; 
public static BufferedReader br; 
public static Socket[] wow; 
public int counter = 0; 
public int port = 2500; 
public Scanner input = new Scanner(System.in); 

public static void main(String[] args) throws IOException{ 
    SSock = new ServerSocket(); 
    Sock = SSock.accept(); 
    dis = new DataInputStream(Sock.getInputStream()); 
    dos = new DataOutputStream(Sock.getOutputStream()); 
    pw = new PrintWriter(dos, true); 
    br = new BufferedReader(new InputStreamReader(dis)); 
    Server s = new Server(); 
    Thread t1 = new Thread(s.new connection()); 
    Thread t2 = new Thread(s.new server()); 
    t1.start(); 
    t2.start(); 
} 

public class connection implements Runnable { 
    public void run() { 
     try { 
      Thread.sleep(200); 
     } catch (Exception e) { 
      //NOTHING!! MWAH MWAH MWAH 
      //Sigh. I'll add something here later... 
     } 

     if ( && Sock.isConnected()) { 

     } 

    } 
} 

public class server implements Runnable{ 
    public void run() { 

    } 
} 

}

+2

Я предлагаю вам использовать 'ServerSocket.accept()' Я предлагаю вам взглянуть на учебник о том, как использовать это (или в сети с Java в целом) –

+0

@PeterLawrey У меня есть первое гнездо, использующие этот метод. Как мне поступить с частью кода по требованию? Я загружу свой код в несколько. –

+1

Если вам нужно больше одного из них, я предлагаю вам использовать цикл. –

ответ

0

Я понял, что должен сделать метод, который возвращает сокет.

public Socket s (Socket so) { //When I add a Socket to an arraylist, I call this method 
    //edit properties 
    return so; 
} 
1

Я думаю, что вы каким-то образом поняли концепцию TCP сокетов. Когда вы пытаетесь инициировать подключение к удаленному серверу, он не «создает спрос», на сервере есть, чтобы прослушивать сокет до, вы инициируете запрос, иначе вы получите сообщение об ошибке «отказ в соединении».

В Java ServerSocket.accept() обрабатывает все это для вас: он прослушивает входящие соединения и как только соединение установлено, оно возвращает вам Socket, который вы используете для дальнейшего общения по этому конкретному соединению.