【问题标题】:how to connect two computers over the same network using java sockets?java - 如何使用java套接字通过同一网络连接两台计算机?
【发布时间】:2015-05-17 04:22:09
【问题描述】:

我无法使用以下客户端服务器程序通过同一网络连接两台不同的机器。 然而,代码在同一台机器上运行良好。 我认为在客户端程序中它在socket.accept() 之前进入无限循环; 请提出可能的解决方案。

server.java

import java.io.*;
import java.net.*;
import java.lang.*;

class server{
    public static void main(String args[]){
        try{
            int one,zero;
            one=zero=0;
            ServerSocket sock=new ServerSocket(2000);
            Socket soc=sock.accept();
            DataInputStream dis=new DataInputStream(soc.getInputStream());
            System.out.println("Connection Established");
            String msg =dis.readLine();
            System.out.println("MESSAGE : "+msg);
            for(int i=0;i<msg.length();i++){
                if(msg.charAt(i)=='0')
                    zero++;
                else
                    one++;
            }
            System.out.println("Ones are "+one);
            System.out.println("Zeros are "+zero);

            soc.close();
        }
        catch(IOException e){
            System.out.println(e);

        }
    }
}

client.java

    import java.io.*;
    import java.net.*;
    class client{
        public static void main(String args[]){
            try{
                Socket soc=new Socket("localhost",2000);//or ipv4 address for different computers
                BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
                PrintStream pr=new PrintStream(soc.getOutputStream());

                System.out.println("Enter message..");
                String msg =is.readLine();
                pr.println(msg);
                System.out.println("YOU ENTERED.."+msg);
                soc.close();
            }
            catch(IOException e){
                System.out.println(e);

            }
        }
    }

【问题讨论】:

  • 您是否更改了这一行:Socket soc=new Socket("localhost",2000); 与服务器 ip?
  • 是的。我做到了。 cmd中的ipconfig-> ipv4地址
  • 检查您的防火墙设置...
  • 完成。没有问题。它只是在 Socket soc=new Socket("localhost",2000);//或不同计算机的 ipv4 地址处陷入无限循环
  • 客户端不会进入“无限循环”。没有循环。不要只是猜测。客户端收到异常。在您的问题中发布它和堆栈跟踪。连接的目标 IP 地址错误,服务器没有运行,或者计算机不在同一个网络上,或者彼此无法访问,或者有防火墙阻碍。

标签: java sockets networking network-programming client


【解决方案1】:

我遇到了同样的问题,这就是我的解决方法:UDP 广播。它将允许客户端连接到服务器,无论其 IP 是什么,因此您不必硬编码 IP 地址,只需硬编码用于 UDP 的端口(见下文)。

这是它的工作原理:

1.服务器监听端口n

2.Client在他能到达的所有端口n发送消息

3.当消息到达服务器端口时,服务器响应发送者并包含其IP地址

4.Client创建一个socket并连接到他从服务器获取的IP地址

这是帮助我的教程:http://michieldemey.be/blog/network-discovery-using-udp-broadcast/

【讨论】:

  • 当我们不知道问题是什么时,你怎么可能知道你有同样的问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-06
  • 1970-01-01
  • 2020-04-16
  • 2017-05-08
  • 2021-08-04
  • 2019-08-09
相关资源
最近更新 更多