WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Архив » Как связать два приложения на двух различных машинах используя для простоты http сервер?

Как связать два приложения на двух различных машинах используя для простоты http сервер?


Дата публикации: 17-03-2013

Предложение от AndYman Deck

Вот бесплатное приложение (получить его можно через VPRO), написанное Rico Jansen и Daniel Ockeloen. Исходный код доступен для NetServer и NetClient http://www.vpro.nl/htbin/scan/www/object/VPRO/JAVA/BETA/OBJECT.


2. А поддерживает ли Java JDK для NT NETBEUI на отдельных (не сетевых) системах, или мне необходимо устанавливать TCP/IP? Я пытался запустить небольшой пример ServerSocket который я нашел сам, но я получил исключение "Invalid address" во время моей попытки запустить слушателя.

Предложени от Tilo Christ

Вам нужно использовать TCP/IP, они не требуют настройки. В вашем приложении используйте "localhost" в качестве имени хоста или TCP/IP- адрес 127.0.0.1. Это предустановленные значения для локальных соединений. Если оно не прошло установите сетевые компоненты и выберете "MS Loopback adapter" в качестве сетевой карты. Это простейший и тупейший драйвер для локального обратного интерфейса. Надеюсь это поможет!


3. Как создать UDP ServerSocket, и есть ли там метод типа receiveMessage?

Предложение от Ben MacKenzie

Различий между серверным сокетом дейтаграмм и клиентским сокетом дейтаграмм нет - так что создавайте обычный сокет.
Замечание: это утверждение не верно для TCP сокетов, так как там используются различные классы для реализации сокетов клиента и сервера.

4. Как получить IP адрес пользователя, который просматривает данную страничку прямо сейчас?

Предложение от Vivek Pabby

// this applet will give the hostname and ip address of the user
// viewing the applet

import java.applet.*;

public class easyHostname extends Applet
{
TextArea ta1 = new TextArea(4, 40);
public void resize() {
resize(300,300);
}
public easyHostname() {
setLayout(new BorderLayout());
Panel p1 = new Panel();
p1.setLayout(new FlowLayout());
add("North", p1);
p1.add(ta1);

InetAddress localhost = null;
try {
localhost = InetAddress.getLocalHost();
} catch(UnknownHostException e) {
showStatus("Can not determine host");
}
ta1.setText("hostname = " + localhost.getHostName() + "\n");
ta1.appendText("address = " + localhost.toString() );
}
}


Предложение от Amit Chaudhary

Просмотри эту часть кода:
http://www2.connectsoft.com/~amit/java/urname.java.
Контактируй с amit@maverick.corus.com для получения еще большей информации.



Предложение от Don Drake

Следующий класс выдаст IP адрес и имя хоста машины, на которой он запущен.

import java.net.*;

public class netInfo {

InetAddress i;
String Hostname;
String ipAddress;

public netInfo()
{
try {
i=InetAddress.getLocalHost();
Hostname=i.toString().substring(0,i.toString().indexOf('/'));
ipAddress=i.toString().substring(i.toString().indexOf('/')+1);
} catch (UnknownHostException e) {
System.out.println("UnknownHostException!!!!!!");
}
}

public netInfo(String Name)
{
try {
i=InetAddress.getByName(Name);
Hostname=i.toString().substring(0,i.toString().indexOf('/'));
ipAddress=i.toString().substring(i.toString().indexOf('/')+1);
} catch (UnknownHostException e) {
System.out.println("ERROR:"+ Name + "is an unknown Host");
}
}

public String getHostName()
{
return Hostname;
}

public String getIPAddress()
{
return ipAddress;
}
}


Предложение от David Johnson

Локальное имя хоста и IP адрес доступны аплету на стороне клиента при помощи использования методов getLocalHost() и getAddress() из класса class java.net.InetAddress. Например:

import java.net.*;

...

// Get the inet address object
InetAddress ia = InetAddress.getLocalHost();

// Convert this to a network-byte-order byte array
byte[] nboa = ia.getAddress(); // will have 4 elements
// e.g for 127.0.0.1 nboa[0] would contain 127
А для того, чтобы получить тоже самое, но со стороны сервера поместите код инструкции SSI в начале html страницы:
<!--#exec cmd="/htdocs/includes/javahost" -->

, где javahost имя CGI скриптиа на C или PERL - шелл скрипт. Всякий раз когда сервер запускает CGI скрипт, он автоматически дампирует 19 переменных в среду окружения, откуда вы можете их получить и найти там, то , что надо. Эти переменные включают можестов послезной информации, включая IP адрес персоны, кто получает ваш файл. Перемнная среды окружения содержит стоку "REMOTE_ADDR". Вы можете затем котролировать вывод в зависимости от клиента - основано на "HTTP_USER_AGENT". Но прежде убедитесь, что сервер httpd настроен на распознование SSI.


5. Как получить IP адрес сервера http который обслуживает аплет?

"Некоторые сайты, типа Netscape имеют по 20 машин, которые выглядят, как один адрес типа home.netscape.com , но натурально имеют разные IP addresses."

Предложение от Vivek Pabby

Следующий код покажет имя хоста и адрес локальной машины (машина на которой запущен браузер). При кликанье на кнопку GetHost, вы сможете получить имя хоста машины, которая хостит аплет, номер хостов имеющих то же самое имя и имя + IP адрес всех машин имеющих тоже самое имя хоста.

import java.util.*;
import java.net.*;
import java.awt.*;
import java.applet.*;

public class easyHostname extends Applet
{
TextArea ta1 = new TextArea(8, 40);
public void resize() {
resize(300,300);
}
public easyHostname() {
setLayout(new BorderLayout());
Panel p1 = new Panel();
p1.setLayout(new FlowLayout());
add("North", p1);
p1.add(new Button("GetHost"));
p1.add(ta1);

InetAddress localhost = null;
try {
localhost = InetAddress.getLocalHost();
} catch(UnknownHostException e) {
showStatus("Can not determine host");
}
ta1.appendText("hostname = " + localhost.getHostName() + "\n");
ta1.appendText("address = " + localhost.toString() );
}
public boolean action(Event e, Object o) {

String host1 = null;
if ("GetHost".equals(e.arg)) {
ta1.appendText("\n" + "Hostname: " + getCodeBase().getHost());
host1 = getCodeBase().getHost();
try {
InetAddress multihosts[] = InetAddress.getAllByName(host1);
int i, j = multihosts.length;
ta1.appendText("\n" + j);
for (i = 0;i sun.net.NetworkClient

---------->sun.net.TransferProtocolClient

--------------->sun.net.ftp.FtpClient

Список конструкторов:

void FtpClient() - создает необозначенный объект FtpClient.

void FtpClient(String) - создает объект FtpClient и открывает соединение на указанный сервер.

void FtpClient(String, int) - создает объект FtpClient и открывает соединение на указанный сервер и порт.


Список методов:

int issueCommand(String) - для внутреннего употребления.

void issueCommandCheck(String) - для внутреннего употребления.

int readReply() - для внутреннего употребления.

Socket openDataConnection(String) - для внутреннего употребления.

void closeServer() - закрывает соединение с сервером.

void openServer(String) - открывает соединение с указанным сервером.

void openServer(String, int) - открывает соединение с указанным сервером и портом.

void login(String, String) - логин с именем пользователя и паролем.

TelnetInputStream get(String) - получить файл.

TelnetOutputStream put(String) - передать файл.

TelnetInputStream list() - получить список файлов директории.

void cd(String) - поменять директорию.

void binary() - установить бинарный режим передачи файлов.

void ascii() - включить текстовой режим передачи файлов.

Пример:

import java.io.*;
import sun.net.*;
import sun.net.ftp.*;

public class ftptry
{
static TelnetInputStream tisList;
static TelnetInputStream tisGet;
static FtpClient fcMyFtp;
static FileOutputStream fos;

public static void main(String args[])
{

try
{
// connect to the specified server and print the return response

fcMyFtp = new FtpClient("ftp.microsoft.com");

System.out.println(fcMyFtp.getResponseString());

// provide the user name and password

fcMyFtp.login("anonymous","vishal_anand@hotmail.com");
System.out.println(fcMyFtp.getResponseString());

//get the directory listing and print it

tisList=fcMyFtp.list();
System.out.println(fcMyFtp.getResponseString());

System.out.println("Directory listing .......");
for(int i=1;i< tisList.available();i++)
System.out.print((char) tisList.read());

// getting a particular file in that directory

fcMyFtp.ascii(); // set transfer mode
System.out.println(fcMyFtp.getResponseString());

tisGet = fcMyFtp.get("xyz.txt"); //file to get
System.out.println(fcMyFtp.getResponseString());

fos = new FileOutputStream(new File("xyz.txt"));
// filename in the local drive

byte inbytes[] = new byte[1024];
int i;

while( (i = tisGet.read(inbytes)) != -1)
fos.write(inbytes);

fos.close();


fcMyFtp.closeServer();

}catch(IOException e)
{
System.out.println("error : " + e);
}
} //end of main

} // end of class


Предложение от Gustavo De la Cruz

Это путь использования URL.
Но вы можете войти только как анонимус.

Но я думаю что лучше открывать сокет на 21-й порт и следовать FTP протоколу.


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

class FTPClient {



public static void main(String args[])
{
URL ftpurl=null;

try
{
String site= "ftp://"+args[0];

System.err.println(site);
ftpurl= new URL(site);
} catch (Exception e)
{
System.err.println("Bad URL");
System.exit(1);
}

try
{
DataInputStream in= new DataInputStream( ftpurl.openStream() );

boolean end=false;

while (!end) {
try {
String s=in.readLine();

if (s==null)
end=true;
System.err.println(s);
} catch (Exception e){
break;
}
}


} catch (Exception e)
{
System.err.println(e);
System.exit(1);
}



}
}


Предложение от John Pritchard

// ftp anonymous client
try{
java.net.URL url = new
URL("ftp://ftp.cs.columbia.edu/pub/kaiser/INDEX.html");
Object obj = url.getContent();

...
}catch( java.net.MalformedURLException){}

Вот и все!
Домен продается

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Апрель 2024 (1)
Октябрь 2018 (14)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта



Случайная цитата

Неизвестный автор:

"Случайное красивым не бывает."

Опрос

Какой текстовый редактор Вы используете?

OpenOffice
AbiWord
Notepad++
UltraEdit
PSPad
Microsoft Office
Microsoft Блокнот
Другой...