połączenie z drugim IP

0

Witam . Chciałem napisać coś w stylu gg , i napotkałem taki problem , wiem jak zrobić aplikacje która nasłuchuje "chęci " podłączenia innego uzytkownika i komunikowania sie z nim ale niewiem jak napisać aplikacje ktora bedzie mogła łączyć się z wybranym IP ... tzn mam IP kogoś mam port i teraz chce sie do niego połączyć i np wysłać ciąg znaków , robie tak :

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

public class siec 
{
//----------------------------------------------------------------------------------------	
public void Polaczenie()
{
try
	{
	Socket s = new Socket("niewiem co tutaj wpisać ? bo jak wpisze IP to niedziała",13);
	try
		{
		InputStream inStream = s.getInputStream();
		Scanner in = new Scanner(inStream);
		
		while(in.hasNext())
			{
			System.out.println(in.nextLine());
			}
		
		}
	finally
	{
	s.close();	
	}
	}

catch (Exception e)
{
e.printStackTrace();
}

}
//----------------------------------------------------------------------------------------
public static void main(String[] str)
{
siec s = new siec();
s.Polaczenie();
}
//----------------------------------------------------------------------------------------
}

zgóry zakładam że to może być zle wiec proszę bardzo tego nie krytykować .
Gdy w miejsce

Socket s = new Socket("niewiem co tutaj wpisać ? bo jak wpisze IP to niedziała",13);

wpisze np tak jak gdzieś w przykładzie znalazłem

Socket s = new Socket("time-A.timefreq.bldrdoc.gov",13);

To połączy się z jakimś sererem i pobierze dane (w tym przypadku czas)
a ja chciałbym się połączyć z danym IP , może ktoś pomóc ?

0

Zebys mogl sie z kims polaczyc to musi byc tam uruchomiony serwer. Sam stwierdziles, ze laczysz sie z serwerem czasu, na porcie 13. Czy IP ktore testujesz piszac swoj komunikator ma uruchomiony serwer? Prawdopodobnie chcesz napisac swoj wlasny serwer, ktory uruchomisz na tym drugim komputerze, nastepnie uruchomisz program u siebie (klienta) i powinno zadzialac (o ile dobrze napisales, nie ma firewalli itp). Przy czym pisanie komunikatora to jednak troche bardziej skokmplikowana sprawa niz zwykle polaczenie z serwerem czasu, wyslanie danych i odebranie czegos w odpowiedzi. Ale nie az tak bardzo skomplikowane :-D

1

P.S Ten emot mial byc inny, zmienia ton mojej wypowiedzi. Sorki.

0

Ja to rozumiem ze musze postawić serwer który bedzie oczekiwał na połączenie , to wiem jak zrobieć , bo jak włącze telent i zrobie pętle zwrotna 127.0.0.1 na danym porcie to mogę się połączyć i działa . Ale jak w aplikacji klient (ten kod co pokazłem wyżej ) wpisze zamiast

Socket s = new Socket("time-A.timefreq.bldrdoc.gov",13);

wpisze :

Socket s = new Socket("moje.ip.0.1",8189);

to niedziała (ps. server oczekuje na porcie 8189)

wiesz jak to obejść ?

0

nie ma czego obchodzić. Tak ja napisał Ci pikseloza, musisz napisać serwer. Tak jak łączysz się z serwerem czasu przez telnet (klient) to pod adresem "time-A.timefreq.bldrdoc.gov" tez jest jakiś serwer, który nasłuchuje na porcie 13 połączeń. To samo musisz zrobić Ty. Żeby połączyć klienta z klientem musisz mieć coś co ich obsłuży (zabrzmiało obscenicznie;P) i to będzie właśnie Twój serwer. http://java.sun.com/docs/books/tutorial/networking/sockets/clientServer.html, tu masz linka do tutoriala Sun'a który może to jakoś jaśniej przedstawi :)

0

A jeszcze takie pytanie co to znaczy "moje.ip.0.1"?

0

ja już postawiłem swój server , jak łącze sie z telnet-u przez petle zwrotna 127.0.0.1 to wszysto gra , teraz sie zastanawiam jak napisać klienta żeby się połączył z serverem ....

A jeszcze takie pytanie co to znaczy "moje.ip.0.1"?
np. 46.108.24.1 
0

Skoro masz serwer, i telnetem sie mozesz polaczyc, to i Java zadziala. Jesli masz na tym samym sprzecie, to localhost bedzie dzialac tak samo jak z telnetem. Jesli to inny komputer, to wpisujesz jego ip / domene. Pamietaj jednak ze tutaj czesto sa zonki, szczegolnie dla ludzi ktorzy dopiero zaczynaja pisac aplikacje serwer-klient. Chodzi mi o firewalle i NAT. Nie wiem z kim probujesz sie laczyc wiec nie bede dywagowac na ten temat bez sensu.
Skoro masz server. probujesz sie polaczyc, i nie dziala, to z pewnoscia dostajesz IOException lub podklase. Zapodaj tutaj stack trace, zgadywanie nie ma sensu bo duzo moze nie dzialac...

0

Problemem może być to że ostatnio w akademikach padla sieć i teraz wszyscy mamy jedno IP , jak z drugiego kompa wpisuje

Socket s = new Socket("52.190.0.1",8189);

to to mi wyzuca konsola

run:
java.net.ConnectException: Connection refused: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
        at java.net.Socket.connect(Socket.java:519)
        at java.net.Socket.connect(Socket.java:469)
        at java.net.Socket.<init>(Socket.java:366)
        at java.net.Socket.<init>(Socket.java:180)
        at siec.Polaczenie(Main.java:12)
        at siec.main(Main.java:40)
BUILD SUCCESSFUL (total time: 2 seconds)
0

Czyli ten ip ktory wpisujesz to jest ip routera waszej sieciw akademiku? Jesli tak, to znaczy ze macie NAT, i aby zadzialalo to w tym routerze musialoby byc zrobione przekierowanie portow: jesli jakis komputer laczy sie na to ip i port 8189, to przekieruj go do takiego a takiego komputera w sieci wewntrznej. Dla pewnosci, powiedz jakie masz ip (musisz miec jakies ip wewnetrzne w sieci, skoro macie NAT w akademiku), oraz wejdz na stronke whatismyip.com, i powiedz co ona pokazuje. Ip w sieci lokalnej:
windows: - ipconfig, pole "Adres IP", linux - ifconfig, pole "inet addr"

0

http://whatismyip.com/ ->>> Your IP Address Is 62.108.176.153
mam viste i mi pokazuje ADRES IPv4 62.108.172.145

0

Szczerze mowiac pierwszy raz widze zeby te dwa tesciki wykazaly inne ip z puli publicznej... A ten ip 59.costam.0.1 to co to jest, co to za komputer? A jak zrobisz polaczenie na twoj ip (ten co pokazuje vista) to dziala?

0

mowie ze może być jakiś problem z siecią akademicka po padla ,
słuchaj jak wpisałem to drugie IP 62.108.172.145 to zadziałało , ale chyba tylko dlategeo ze to adres wewnatrz sieci a ja laczylem sie z kompa z tej samej sieci , a gdy ktos bedzie chcial z poza loakalnej sieci sie do mnie podlaczyc to niezadziala ?

0

Powiem tak - probowalem pingowac oba ip, i ten ktory jest zwracany przez whatismyip sie pinguje, a ten drugi (vista) nie. Z tego by wynikalo ze jestes niedostepny dla swiata zewnetrznego, albo firewall jakis blokuje icmp (np ten windowsowy w xp domyslnie to robil). Trudno mi cos wiecej powiedziec.

0

Ok wielkie dzieki na razie tyle musi mi wystarczyć , naprawde duzo mi pomogleś i nawet się duzo przy tym nie złościłeś :) , duże piwo dla ciebie

0

Zrobione , na razie dziala tylko po Lanie , zastanawiam się jak to się ma do IP globalnego , gdy mam inne IP wewnetrzne , wiesz może jak to jest tłumaczone , tzn (chodzi chyba o NAT) jak wyszczególnić jeden komputer z sieci ktora ma 1 adres głobalny ?

0

To dziala tak: twoj komputer jest za NATEM, i ma adres powiedzmy 192.168.1.100, maska poscieci to 255.255.255.0, czyli wszyskie kompy ktore maja ip 192.168.1.xxx do niej naleza. Teraz, jak wysylaszs pakiet do neta, np wysylajac żądanie http, twoje pakiety najpirw przechodza przez jakis sprzet NATujacy, jakis router powiedzmy.Tam, zmieniane jest ip zrodlowe (twoje, 192.168.1.100), na ip maszyny natujacej (powiedzmy 62.108.9.17). W odpowiedzi serwer http wysyla stronke, na adres tego NATA, czyli 62.108.9.17, a gdy taki pakiet juz dojdzie, to NAT wie ze tak na prawde taki pakiet powinien trafic do komputera 192.168.1.100 w sieci wew, wiec zmienia ip docelowe na Twoje, i przesyla. Tak sie dzieje jesli jestes klientem.
Jak chcesz miec uruchomiony serwer, to znaczy ze ktos ma sie podlaczac do Ciebie. Zalozmy ze masz serwer ktory napisales na porcie 8192. Ktos chce z niego skorzystac, ale nie moze uzyc jako cel Twojego adresu ip z sieci wew, poniewaz on w internecie nic nie znaczy, jest nieroutowalny, musi uzyc ip publicznego, 62.108.9.17. Pakiet ktory ma taki cel dociera do niego, ale przeciez nat nie nasluchuje na porcie 8192 (moze przez zbieg okolicznosci cos nasluchiwac na tym porcie, ale to nie jest to o co Tobie chodzi), i odrzuca polaczenie. Musisz powiedziec tej maszynie ze jesli przychodzi pakiet na port 8192, ma zostac przekierowany na komputer 192.168.1.100, czyli Twoj. To sie robi juz roznie, zaleznie od producenta routera (pisze routery, chodzi mi o takie routerki typu linksys czy dlink, no bo naczesciej tak to wlasnie wyglada), ale ogolnie jak mniej wiecej wiesz o co chodzi to albo zrobisz sam albo poszukasz w necie.

0

Wielkie dzieki jeszcze raz , naprawde duzo mi uswiadomiles , tzn wiedzialem ze to dziala mniejwiecej tak jak Ty to powiedziales , ale niewiedzialem jak dokladnie , jeszcze raz WIELKIE DZIEKI !!

1 użytkowników online, w tym zalogowanych: 0, gości: 1