2014-01-24 3 views
1


Приложение состоит из сервера и клиента. Когда я запускаю приложение локально с помощью ip (127.0.0.1), чат работает нормально. Конечно, все дело в том, чтобы запустить мессенджера на онлайн-сервере, чтобы я мог подключиться к нему с другого компьютера и быть полным гордости и радости.У меня есть Java-сервер и клиентская чат-программа, но где я могу ее загрузить?

Мой вопрос (и я знаю, что это звучит так, как будто я не проводил никаких исследований, и я ленивый ... поверьте мне, я озадачен) Что мне нужно сделать с программой и где я могу ее загрузить? ?

Я хочу получить доступ к своей программе из своей локальной сети, а не просто проверить ее на своем компьютере.


клиентское приложение:

package helloworldC; 
import java.io.*; 
import java.net.*; 
import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 

public class client extends JFrame { 
private JTextField userText; 
private JTextArea chatWindow; 
private ObjectOutputStream output; 
private ObjectInputStream input; 
private String message = ""; 
private String serverIP; 
private Socket connection; 


//constructor 
public client(String host){ 
    super("Client"); 
    serverIP = host; 
    userText= new JTextField(); 
    userText.setEditable(false); 
    userText.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent event) { 
      sendMessage(event.getActionCommand()); 
      userText.setText(""); 

     } 
    } 
    ); 
    add(userText, BorderLayout.NORTH); 
    chatWindow= new JTextArea(); 
    add(new JScrollPane(chatWindow), BorderLayout.CENTER); 
    setSize(300,150); 
    setVisible(true); 

} 

//connect 

public void startRunning(){ 
    try{ 
    connectToServer(); 
    setupStreams(); 
    whileChatting(); 
    }catch(EOFException eofException){ 
    showMessage("\n Client terminated") ; 
    }catch(IOException ioException){ 
     ioException.printStackTrace(); 
    } 
    finally{ 
     closeCrap(); 
    } 


} 
//conect to server 

private void connectToServer() throws IOException{ 
    showMessage("connecting...\n"); 
    connection = new Socket(InetAddress.getByName(serverIP),6789);//52 
    showMessage("Connected to: " + connection.getInetAddress().getHostName()); 
} 
// set up streams 53 
private void setupStreams() throws IOException{ 
    output = new ObjectOutputStream(connection.getOutputStream()); 
    output.flush(); 
    input = new ObjectInputStream(connection.getInputStream()); 
    showMessage("\n streams are ready"); 

} 

//while chatting 54 

private void whileChatting() throws IOException{ 
    ableToType(true); 
    do{ 
     try{ 
      message = (String) input.readObject(); 
      showMessage("\n"+message); 
     }catch(ClassNotFoundException classNotFoundException){ 
      showMessage("\n class problen"); 
     } 
    }while(!message.equals("SERVER -END")); 

} 

//close the streams and sockets 
private void closeCrap(){ 
    showMessage("\n closing sheet"); 
    ableToType(false); 
    try{ 
     output.close(); 
     input.close(); 
     connection.close(); 
    }catch(IOException ioException){ 
     ioException.printStackTrace(); 

    } 

} 
//send messages 56 

private void sendMessage(String message){ 
    try{ 
     output.writeObject("CLIENT - "+ message); 
     output.flush(); 
     showMessage("\nCLIENT -"+message); 

    }catch(IOException ioException){ 
     chatWindow.append("\n something is wrong"); 

    } 

} 
//update chatWindow57 

private void showMessage(final String m){ 
    SwingUtilities.invokeLater(
      new Runnable() { 
       public void run() { 
      chatWindow.append(m); 

     } 
    }); 


} 

//permission to type 

private void ableToType(final boolean tof){ 
    SwingUtilities.invokeLater(
      new Runnable() { 
       public void run() { 
      userText.setEditable(tof); 

     } 
    }); 


} 

} 

сервер:

package helloworld; 

import java.io.*; 
import java.net.*; 
import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 


public class Server extends JFrame { 
private JTextField userText; 
private JTextArea chatWindow; 
private ObjectOutputStream output; 
private ObjectInputStream input; 
private ServerSocket server; 
private Socket connection; 






//constructor 
public Server(){ 
super("Messenger"); 
userText=new JTextField(); 
userText.setEditable(false); 
userText.addActionListener(
    new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent event) { 
      sendMessage(event.getActionCommand()); 
      userText.setText(""); 
     } 
    } 
); 
add(userText, BorderLayout.NORTH); 
chatWindow = new JTextArea(); 
add(new JScrollPane(chatWindow)); 
setSize(300,150); 
setVisible(true); 
} 
// set up and run the server 
public void startRunning(){ 
try{ 
server = new ServerSocket(6789, 100); 
    while(true){ 
     try{ 
      //connect and have conversation 
      waitForConnection(); 
      setupStreams(); 
      whileChatting(); 

     }catch(EOFException eofException){ 
      showMessage("\n Server ended the connection! "); 
     }finally{ 
      closeCrap(); 
     } 



    } 
}catch(IOException ioException){ 
    ioException.printStackTrace(); 
} 
} 

//wait for connection, then display connection information 
    private void waitForConnection() throws IOException { 
showMessage("Waiting for connection...\n"); 
connection = server.accept(); 
showMessage("now connected to "+connection.getInetAddress().getHostName()+"\n"); 
} 

//get stream to send and receive data 
private void setupStreams() throws IOException { 
output = new ObjectOutputStream(connection.getOutputStream()); 
output.flush(); 
input = new ObjectInputStream(connection.getInputStream()); 
showMessage("\n Streams are good!\n"); 
} 
//during the chat conversation 
private void whileChatting() throws IOException{ 
    String message = " You are now connected! "; 
    sendMessage(message); 
    ableToType(true); 
    do{ 
     try{ 
      message = (String) input.readObject(); 
      showMessage("\n"+message); 
     }catch(ClassNotFoundException classNotFoundException){ 
      showMessage("\n wtf???"); 
     } 
    }while(!message.equals("CLIENT - END")); 

} 

// close streams and sockets 
private void closeCrap(){ 
    showMessage("\n Closing all...\n"); 
    ableToType(false); 
    try{ 
     output.close(); 
     input.close(); 
     connection.close(); 
    }catch(IOException ioException){ 
     ioException.printStackTrace(); 
    } 
} 
//send a message to client 
private void sendMessage(String message){ 
    try{ 
     output.writeObject("SERVER - "+message); 
     output.flush(); 
     showMessage("\nSERVER - " + message); 
    }catch(IOException ioException){ 
     chatWindow.append("\n ERROR: cant send"); 
    } 
} 
private void showMessage(final String text){ 
    SwingUtilities.invokeLater(
      new Runnable() { 
      public void run() { 
       chatWindow.append(text); 
      } 
     } 
    ); 
} 
private void ableToType(final boolean tof){ 
    SwingUtilities.invokeLater(
      new Runnable() { 
      public void run() { 
       userText.setEditable(tof); 
      } 
     } 
    ); 

} 
} 
+0

Я бы порекомендовал простой облачный сервер или службу общего доступа, поддерживающую Java, причем последний вариант несколько редок. – kshikama

+0

Amazon EC2 поддерживает это, я считаю. –

ответ

0

Сначала вам потребуется сервер провайдера, который позволяет запускать программы Java. Я не вхожу в какой-либо хороший или плохой провайдер, поэтому вы можете настроить сервер самостоятельно в своем доме (например, с помощью http://de.dyn.com/dns/, чтобы предоставить вам необходимые фиксированные DNS). Но не забудьте следить за проблемами безопасности (открывать порты и другие вещи) и что компьютер должен быть в сети, чтобы иметь доступ к чату, что может привести к высокой стоимости энергии. С другой стороны, вы можете использовать его для загрузки других вещей (например, Webserver, FTP и т. Д.).

Глядя на это таким образом, ваша проблема не так ява зависит, как вы просто должны заменить IP в вашей программе, я думаю;)

+0

Большое спасибо, но я не хочу использовать свой собственный компьютер ... Есть ли сайт, на котором может размещаться мое приложение? – misha312

+0

Единственный, кого я знаю, который мне был рекомендован, это strato.com, но я сам не пробовал. – omgBob

2

Причина, по которой IP 127.0.0.1 работает в Beacause то будет IP что-то называется localhost. Так как вы размещаете как сервер, так и клиент на машине, который работает отлично.

Если вы хотите сказать, что серверная программа на одном компьютере и клиенте находится внутри вашей локальной сети (доступ только от внутри вашей сети), вы должны указать IP-адрес клиента на IP-адрес своего сервера адрес.

Но все немного отличается, если вы хотите получить к нему доступ от OUTSIDE вашей сети. Схожая с этим, только то, что у вас есть порт вперед IP-адрес вашего сервера с вашего маршрутизатора с портом (6789 в вашем случае). Это делает то, что, когда ваш общедоступный IP-маршрутизатор получает данные с портом 6789, он знает, куда его отправить. Если он этого не знает, он просто отбрасывает его.

Если у вас есть порт, перенаправленный вашим маршрутизатором для приема данных с порта 6789. Вам нужно узнать свой публичный IP-адрес. (что легко сделать, просто отправляйтесь в: http://www.whatsmyip.org/) Затем от за пределами вашей локальной сети запустите своего клиента на компьютер. Затем замените IP-адрес, к которому клиент должен подключиться, независимо от вашего публичного IP-адреса.

ПРИМЕЧАНИЕ: Постоянный IP-адрес вашего маршрутизатора изменяется время от времени, так что если вы попытаетесь соединить один день, ваш IP-адрес маршрутизатора может измениться. Способ избежать этого - использовать DDNS (динамическую систему имен доменов), но это еще одна тема.

Надеюсь, это поможет!
-Kad

0

Мое чтение - это то, что вы экспериментируете с Java и программированием и теперь любопытно, как развернуть приложение в дикой природе. Вы можете попробовать сырой сервер, например, бесплатную учетную запись Amazon Web Service; но вы будете откусывать множество настроек, чистая админ, работа администратора sys. Большинство сервисов не предоставляют графический интерфейс, поэтому использование JFrame и swing не будет работать. Вам будет лучше использовать бесплатный веб-PaaS, такой как redhat openshift, и сделать websockets chat app, если вы хотите узнать, как сделать программное обеспечение, которое работает в дикой природе.