我正在尝试实现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”吗?
感谢您的帮助
答案 0 :(得分:4)
尝试使用其他(更高端口),因为您的计算机上可能已经使用了4444:
端口4444的技术说明:
端口4444专门分配给Kerberos 5身份验证功能,特别是在各种系统中实现Kerberos 4,包括在Mac OS X平台下运行的系统。通信端口4444用于将Kerberos 5凭证转换为可接受的Kerberos 4格式。
答案 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);