Java - 运行基本套接字网络程序的麻烦

时间:2011-08-12 19:03:23

标签: java sockets networking

我正在尝试实现Sun的示例Socket程序,即在此处找到的KnockKnock服务器和客户端:http://download.oracle.com/javase/tutorial/networking/sockets/readingWriting.html

所以我将3个文件(EchoClient,KnockKnockServer,KnockKnockProtocol)构建到一个项目中,构建它们,然后转到cmd运行它们:

> java KnockKnockServer
> Could not listen on port: 4444. 

另外,我在使用EchoClient时遇到了问题(并不是因为服务器不能正常工作)。我得到以下内容:

> java EchoClient
> Couldn't get I/O for the connection to: localhost 

我在EchoClient类中改变的一件事是尝试连接到“localhost”而不是他们的示例机器“taranis”。我完全不了解I / O错误。

所以我需要弄清楚这些东西,以便我以后可以适应它。这就是我想知道的:我如何知道KK服务器中的端口监听?如果我想连接到EchoClient中的另一台计算机,我会直接放置他们的(IPv4)IP地址而不是“localhost”吗?

感谢您的帮助

4 个答案:

答案 0 :(得分:4)

尝试使用其他(更高端口),因为您的计算机上可能已经使用了4444:

  

端口4444的技术说明:

     

端口4444专门分配给Kerberos 5身份验证功能,特别是在各种系统中实现Kerberos 4,包括在Mac OS X平台下运行的系统。通信端口4444用于将Kerberos 5凭证转换为可接受的Kerberos 4格式。

source

答案 1 :(得分:1)

该教程违反了关于处理异常的规则#2:它组成了自己的错误消息'无法获得连接的I / O:...'而不是打印实际的异常。改变它来做那件事,然后你有希望找出问题所在。

我抱怨大约八年前的那个教程; - (

(规则#1是打印的东西。

答案 2 :(得分:0)

昨天我在尝试学习同样的事情时遇到了这个问题!

1)确保服务器和客户端具有相同的端口,例如:

kkSocket = new Socket("localhost", 802); //Client 

serverSocket = new ServerSocket(802); //Server  (我偶然遇到了这个问题)

2)尝试将服务器端口和客户端端口更改为10000或更高

3)程序输出“Knock!Knock!”而且你需要输入输入。(你描述的挂起可能只是等待输入的服务器)

答案 3 :(得分:0)

试试这个: 将taranis主机名更改为localhost

kkSocket = new Socket("localhost", 4444);