کار نکردن برنامه socket از طریق اینترنت (valid ip) در جاوا

+1 رأی

من یه برنامه socket نوشنم که client یه رشته ارسال می کنه به server بعد این برنامه فقط توی شبکه داخلی کار میکنه

وقتی public ip  رو به برنامه میدم کار نمی کنه , مشکل کجاست؟

برنامه client :



import java.io.FileOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Formatter;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;


public class CHATDemo {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner ipPort = new Scanner(System.in);
        System.out.println("Enter IP:");
        String ip = ipPort.nextLine();
        System.out.println("Enter PORT:");
        int port = ipPort.nextInt();
        try (Socket socket = new Socket(ip, port)) {

            Formatter fOPS = new Formatter(socket.getOutputStream());
            fOPS.format("Connected");
            fOPS.flush();
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        }
    }

}

 

برنامه server :

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.net.ssl.SSLServerSocket;


public class CHATDemo2 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner portSca = new Scanner(System.in);
        System.out.println("Enter PORT:");
        int port = portSca.nextaInt();
        try (ServerSocket serverSocket = new ServerSocket(port);
                Socket socket = serverSocket.accept()) {
            Scanner receive=new Scanner(socket.getInputStream());
            System.out.println(receive.nextLine());
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        }
    }

}
سوال 2 ماه قبل در تالار کامپیوتر و اینترنت توسط dn47ep (28 امتیاز) 100% درصد پذیرش
ویرایش 2 ماه قبل توسط Saeed Zarinfam

1 جواب

+1 رأی
 
بهترین جواب

شما از constructor کلاس ServerSocket استفاده کرده اید و ip valid را بعنوان پارامتر constructor ارسال نکرده اید، بنابراین مقدار پیشفرض localhost برای ip در نظر گرفته می شود. برای اینکه برنامه شما به ip valid سیستم bind شود باید از کد زیر استفاده کنید:

InetAddress validP = InetAddress.getByName("192.168.1.20");
serverSocket = new ServerSocket(port, 0, validP);
جواب 2 ماه قبل توسط Saeed Zarinfam (825 امتیاز)
انتخاب شده در 2 ماه قبل توسط dn47ep
ممنون از پاسخ تون , فک کنم 192.168.1.20 رو برای مثال ذکر کردین ولی اینجا باید همون public ip یا همون valid ip رو وارد کنیم؟ من این کار رو کردم باز هم کار نکرد ( با سرچ my ip در گوگل public ip رو بدست اوردم).
بله این ip رو تستی گذاشتم. شما مطمئنین که اینترنتتون ip valid داره و ip اینترنتتون اشتراکی نیست.
نه مطمئن نیستم , در واقع منظورتون رو از valid ip هم نمی فهمم من با اینترنت ایرانسل که با گوشی share شده به اینترنت وصل شدم و ip رو با سرچ عبارت my ip  در گوگل بدست میارم
اون ip که ایرانسل به شما داده و گوگل هم بهتون نشون داده که مختص شما نیست. بین چندین کاربر دیگه ایرانسل share، البته اینترنت ADSL هم همینطوره مگه اینکه پول بدین و IP valid خریداری کنید. شما ip valid خریدین؟
خیلی خیلی ممنون . من فک میکردم با همین ip اشتراکی میشه اصلا نمی دونستم vail ip چیه و باید بخرم .

سوال های مشابه

+1 رأی
1 جواب 150 بازدید
0 رأی
1 جواب 432 بازدید
0 رأی
1 جواب 463 بازدید
+2 رأی
1 جواب 585 بازدید
+2 رأی
1 جواب 2,609 بازدید
+1 رأی
1 جواب 221 بازدید
0 رأی
1 جواب 25 بازدید
+1 رأی
1 جواب 100 بازدید
...