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

سوالات مشابه

+1 امتیاز
2 پاسخ 1.1هزار بازدید
+1 امتیاز
1 پاسخ 2.8هزار بازدید
0 امتیاز
1 پاسخ 2.3هزار بازدید
0 امتیاز
0 پاسخ 426 بازدید
0 امتیاز
1 پاسخ 1.4هزار بازدید
+2 امتیاز
1 پاسخ 6.7هزار بازدید
+2 امتیاز
1 پاسخ 5.5هزار بازدید
...