Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用ip地址和端口号连接到服务器套接字?(客户端运行在与服务器不同的计算机上)_Java_Sockets_Serversocket - Fatal编程技术网

Java 如何使用ip地址和端口号连接到服务器套接字?(客户端运行在与服务器不同的计算机上)

Java 如何使用ip地址和端口号连接到服务器套接字?(客户端运行在与服务器不同的计算机上),java,sockets,serversocket,Java,Sockets,Serversocket,客户端程序 public class client implements Runnable { protected static String server_IP = "141.117.57.42"; private static final int server_Port = 5555 ; protected static String client_IP ; public static void main(String[] args) throws IOExcept

客户端程序

public class client implements Runnable {

protected static String server_IP = "141.117.57.42";
private static final int server_Port = 5555 ;
protected static String client_IP ;


public static void main(String[] args) throws IOException{
    final  String host = "localhost";
    int init = 0  ;
    
    try {
        InetAddress iAddress = InetAddress.getLocalHost();
        client_IP = iAddress.getHostAddress();
        System.out.println("Current IP address : " +client_IP);
    } catch (UnknownHostException e) {
    }
    
    try {System.out.println("hello1");
        Socket socket = new Socket(server_IP,server_Port);
        System.out.println("hello3");
        init = initialize(socket);
       
    }catch (SocketException e) {
        System.out.println("Error: Unable to connect to server port ");
    }

    
    if (init ==  0 ){
        System.out.println("error: Failed to initialize ");
        System.exit(0);
        
    }
    //Thread init_Thread = new Thread();
}
private static int initialize(Socket socket ) throws IOException{
    System.out.println("hello");
    int rt_value = 0 ;
    
    OutputStream os = socket.getOutputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    PrintWriter pw = new PrintWriter(os, true);
    
    System.out.println("server: " + br.readLine());
    pw.println("192.343.34.321");
   // BufferedReader userInputBR = new BufferedReader(new InputStreamReader(System.in));
    //String userInput = userInputBR.readLine();
    
    //out.println(userInput);
    
    socket.close();
    return rt_value = 1 ;
    
    
    
}
public void run(){
    
}
}
服务器端程序

public class server {

protected static String server_IP ;

public static void main(String[] args) throws IOException {
   
    
    int server_Port = 5555 ;



    try {
        InetAddress iAddress = InetAddress.getLocalHost();
        server_IP = iAddress.getHostAddress();
        System.out.println("Server IP address : " +server_IP);
    } catch (UnknownHostException e) {
    }
    
        ServerSocket serverSocket = new ServerSocket(server_Port);
    
    
        while (true) {
            Socket socket = serverSocket.accept();
            
             OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os, true);
            InputStreamReader isr = new InputStreamReader(socket.getInputStream());
            pw.println("Connection confirmed ");
            BufferedReader br = new BufferedReader(isr);
            String str = br.readLine();
            
            pw.println("your ip address is " + str);
            
            pw.close();
           //socket.close();

            //System.out.println("Just said hello to:" + str);
        }
    
如何使用ip地址和端口号连接到服务器套接字(客户端运行在与服务器不同的计算机上)


当我将客户端中的服务器IP更改为“本地主机”时,它可以完美地工作。

要在代码中连接,请使用:

Socket socket = new Socket(server_IP,server_Port);
因此,您可以使用:

Socket socket = new Socket("192.168.1.4", 5555);
看起来你的代码中有这个,所以我不确定你有什么问题

不要忘记,如果路由器位于本地网络之外,则必须将其设置为转发端口

不要忘记,如果您正在运行防火墙,这也会干扰连接。

更新/etc/hosts
添加以下行


127.0.1.1 192.168.10.109

一些大学设置其网络,使某些端口上的计算机之间无法建立连接。这可能也是一个问题。您可能希望尝试将其使用的端口更改为80或8080或类似的端口。您的代码抛出了什么错误?没有错误,它在Socket Socket=new Socket(服务器IP,服务器端口)处挂起;。它打印的是“hello1”,而不是“hello2”。我假设某种端口控制策略有效(或者目标机器上有防火墙)。在我的旧学校,我无法连接到IRC,因为端口6667被拒绝,尽管通常联网的计算机限制较少。尝试将代码指向一个网址或其他东西,看看它是否仍然挂起(www.google.com-将端口更改为80)。如果它在本地机器上工作,那么你就知道这是网络的问题。(1)永远不要忽略异常,(2)当你捕获到异常时,打印异常,而不仅仅是你自己设计的一些错误消息。否则调试就会变成一个猜测游戏。谢谢,虽然我没有收到任何错误,但我的程序在连接到套接字时挂起。某些服务依赖于127.0.1.1环回地址,无法重定向。我不推荐这个解决方案,但这是一个巧妙的技巧!谢谢atlex,这对我来说是个新闻。