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套接字不工作。来自操作系统概念的示例-Abraham Silberschatz_Java_Sockets_Localhost - Fatal编程技术网

Java套接字不工作。来自操作系统概念的示例-Abraham Silberschatz

Java套接字不工作。来自操作系统概念的示例-Abraham Silberschatz,java,sockets,localhost,Java,Sockets,Localhost,关于书中的一个例子,我有一个问题。更新第8版中的这个示例在第3.6节“客户机-服务器系统中的通信”中 我试图运行该部分中的示例代码,但它并没有完全按照预期工作。当我完全按照书中所写的方式运行代码时,客户机请求在localhost ip地址127.0.0.1处创建一个套接字。这个很好用 但是,当我将客户机和服务器代码放在不同的PC上,并将服务器的客户机IP地址更改为contact到192.xxx.xxx.xxx时,客户机代码只是挂起,没有返回日期。有人知道为什么会这样吗 以下是代码片段: 服务器:

关于书中的一个例子,我有一个问题。更新第8版中的这个示例在第3.6节“客户机-服务器系统中的通信”中

我试图运行该部分中的示例代码,但它并没有完全按照预期工作。当我完全按照书中所写的方式运行代码时,客户机请求在localhost ip地址127.0.0.1处创建一个套接字。这个很好用

但是,当我将客户机和服务器代码放在不同的PC上,并将服务器的客户机IP地址更改为contact到192.xxx.xxx.xxx时,客户机代码只是挂起,没有返回日期。有人知道为什么会这样吗

以下是代码片段:

服务器:

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

public class DateServer
{
    public static void main(String [] args)
    {
        try 
        {
            ServerSocket sock = new ServerSocket(6013);

            // now listen for connections
            while(true)
            {
                Socket client = sock.accept();

                PrintWriter pout = new PrintWriter(client.getOutputStream(), true);

                // write the Date to the socket
                pout.println(new java.util.Date().toString());

                // close the socket and resume listening for connections
                client.close();
            }           
        }
        catch (IOException ioe)
        {
            System.err.println(ioe);
        }   

    }
}
客户:

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

public class DateClient
{
    public static void main(String[] args)
    {
        try
        {
            //make connection to server socket
            Socket sock = new Socket("192.xxx.xxx.xxx", 6013);

            InputStream in = sock.getInputStream();
            BufferedReader bin = new BufferedReader(new InputStreamReader(in));

            // read the date from the socket
            String line;
            while ( (line = bin.readLine()) != null)
            {
                System.out.println(line);
            }

            // close the socket connections
            sock.close();       
        }
        catch (IOException ioe)
        {
            System.err.println(ioe);
        }
    }
}
IP=127.0.0.1时的输出:

C:\Users\xxxxx\Documents\Dropbox\practice>java DateClient
Sat Feb 07 22:46:59 PST 2015

C:\Users\xxxxx\Documents\Dropbox\practice>
IP=192.xxx.xxx.xxx的输出:

C:\Users\xxxxx\Documents\Dropbox\practice>java DateClient
*nothing here. But program doesn't terminate*

可能是防火墙规则?从ping开始,如果成功的话,从客户端使用nmap、telnet等检查端口是否打开。可能有很多方面,从防火墙到防病毒。计算机在同一局域网上吗?你能从客户机ping服务器的IP吗?ping只能在一个方向工作。从台式机到笔记本电脑。不是从笔记本电脑到台式机。这些计算机在同一个大学局域网上。我在墙上的以太网端口和我的两台电脑之间有一个交换机。它们都在同一个子网中,掩码为255.255.255.0。你是说客户端真的会永远阻塞吗?如果不是的话,客户端最终会发生什么?嗯,我没有永远测试它。但是客户挂了几分钟。我会再试一次,让它开一段时间,因为我现在不处理那个问题。我用收到的结果更新了主要帖子。