【问题标题】:Finding Java server time and client time查找 Java 服务器时间和客户端时间
【发布时间】:2013-11-09 10:26:27
【问题描述】:

我从这个网站server client code尝试了这段代码

它在我的机器上运行良好,我先运行服务器代码,然后运行客户端代码。 我有时间。 我尝试将服务器端代码放在另一台 PC 上并在那里在 eclipse 上运行它,同样我尝试在我这边从 eclipse 运行客户端代码但没有成功。 它给了我以下错误:

Exception in thread "main" java.net.BindException: Cannot assign requested address: JVM_Bind
    at java.net.DualStackPlainSocketImpl.bind0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
    at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
    at java.net.PlainSocketImpl.bind(Unknown Source)
    at java.net.ServerSocket.bind(Unknown Source)
    at java.net.ServerSocket.<init>(Unknown Source)
    at sample.servertime.main(servertime.java:13)

我做对了还是我做错了。需要帮助。 这是 2 个代码。

// Date Client   

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

class DateClient
{
    publicstaticvoid main(String args[]) throws Exception
    {
        Socket soc=new Socket(InetAddress.getLocalHost(),5217);        
        BufferedReader in=new BufferedReader(
                new InputStreamReader(
                        soc.getInputStream()
                        )
                    );

        System.out.println(in.readLine());
    }    
}



// Date Server

import java.net.*;
import java.io.*;
import java.util.*;

class DateServer
{
    publicstaticvoid main(String args[]) throws Exception
    {
        InetAddress locIP = InetAddress.getByName("192.168.1.21");
        ServerSocket s= new ServerSocket(5217, 0, locIP);

        while(true)
        {
            System.out.println("Waiting For Connection ...");
            Socket soc=s.accept();
            DataOutputStream out=new DataOutputStream(soc.getOutputStream());
            out.writeBytes("Server Date" + (new Date()).toString() + "\n");
            out.close();
            soc.close();
        }

    }
}

【问题讨论】:

    标签: java datetime client-server client serversocket


    【解决方案1】:

    在服务器部分,您已经硬编码了服务器的 IP 地址:

    InetAddress locIP = InetAddress.getByName("192.168.1.21");
    ServerSocket s= new ServerSocket(5217, 0, locIP);
    

    当您在另一台机器上运行它时,地址会有所不同,因此除非您更改它,否则它无法绑定。
    您可以将其更改为绑定到所有地址,例如:

    ServerSocket s = new ServerSocket(5217);
    

    此外,客户端将始终尝试连接到本地计算机:

    Socket soc=new Socket(InetAddress.getLocalHost(),5217);
    

    所以如果你想让客户端连接到另一台机器上的服务器InetAddress.getLocalHost()必须改成服务器的地址。

    【讨论】:

    • 是的,我看到了同样的错误,我检查了它..现在我得到连接超时
    • @user2958963 运行服务器和客户端的机器之间是否有连接?是否有防火墙阻止传入请求?
    • 我应该怎么做才能在客户端机器上显示日期和时间
    • @user2958963 如果您将服务器类更改为使用ServerSocket s = new ServerSocket(5217); 而客户端则使用InetAddress locIP = InetAddress.getByName("ip-address or hostname of server");Socket soc= new Socket(locIP,5217); 它应该可以工作,前提是没有防火墙阻止流量。我试过了,它对我有用。
    • 这是我的错误。我今天早上做了一些额外的事情,我后来忘记删除了。它又工作了。thnx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多