+1 امتیاز
قبل در برنامه نویسی توسط (33 امتیاز)
ویرایش شده قبل توسط

من یه برنامه 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());
        }
    }

}

1 پاسخ

+1 امتیاز
قبل توسط (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);
قبل توسط (33 امتیاز)
ممنون از پاسخ تون , فک کنم 192.168.1.20 رو برای مثال ذکر کردین ولی اینجا باید همون public ip یا همون valid ip رو وارد کنیم؟ من این کار رو کردم باز هم کار نکرد ( با سرچ my ip در گوگل public ip رو بدست اوردم).
قبل توسط (1.1هزار امتیاز)
بله این ip رو تستی گذاشتم. شما مطمئنین که اینترنتتون ip valid داره و ip اینترنتتون اشتراکی نیست.
قبل توسط (33 امتیاز)
نه مطمئن نیستم , در واقع منظورتون رو از valid ip هم نمی فهمم من با اینترنت ایرانسل که با گوشی share شده به اینترنت وصل شدم و ip رو با سرچ عبارت my ip  در گوگل بدست میارم
قبل توسط (1.1هزار امتیاز)
اون ip که ایرانسل به شما داده و گوگل هم بهتون نشون داده که مختص شما نیست. بین چندین کاربر دیگه ایرانسل share، البته اینترنت ADSL هم همینطوره مگه اینکه پول بدین و IP valid خریداری کنید. شما ip valid خریدین؟
قبل توسط (33 امتیاز)
خیلی خیلی ممنون . من فک میکردم با همین ip اشتراکی میشه اصلا نمی دونستم vail ip چیه و باید بخرم .

سوالات مشابه

+1 امتیاز
1 پاسخ 2.6هزار بازدید
0 امتیاز
1 پاسخ 2.1هزار بازدید
0 امتیاز
0 پاسخ 348 بازدید
0 امتیاز
1 پاسخ 1.2هزار بازدید
+2 امتیاز
1 پاسخ 2.2هزار بازدید
+2 امتیاز
1 پاسخ 5.3هزار بازدید
...