繁体   English   中英

尝试实现Java套接字示例的问题

[英]Problems trying to implement Java Sockets example

我试图在这里实现这个例子: 读取和写入套接字

我将代码复制并粘贴到NetBeans中。 我将端口名称“taranis”更改为“localhost”并尝试运行该示例,但我收到错误:

run:无法获得与localhost连接的I / O. Java结果:1成功建立(总时间:1秒)

我还尝试用localhost替换我的笔记本电脑的实际主机名,但它也给出了类似的错误。 你能帮助确定我做错了什么吗?

编辑:关于马克的推荐,当我替换

System.err.println("Couldn't get I/O for " + "the connection to: localhost.");

e.printStackTrace();

我明白了:

run:
java.net.ConnectException: Connection refused: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
        at java.net.Socket.connect(Socket.java:529)
        at java.net.Socket.connect(Socket.java:478)
        at java.net.Socket.<init>(Socket.java:375)
        at java.net.Socket.<init>(Socket.java:189)
        at EchoClient.main(EchoClient.java:12)
Java Result: 1
BUILD SUCCESSFUL (total time: 3 seconds)

echo服务没有收听。 为什么不写自己的? 运行下面的应用程序并更改您的客户端以连接到同一端口(8000)。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class EchoServer {

    private static final int PORT = 8000;

    public static void main(String[] args) throws Exception {

        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(PORT);
        }
        catch (IOException e) {
            System.err.println("Could not listen on port: " + PORT);
            System.exit(1);
        }

        Socket clientSocket = null;
        try {
            clientSocket = serverSocket.accept();
        }
        catch (IOException e) {
            System.err.println("Accept failed.");
            System.exit(1);
        }

        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

        System.out.println("Echo server started");

        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            System.out.println("echoing: " + inputLine);
            out.println(inputLine);
        }
        out.close();
        in.close();
        clientSocket.close();
        serverSocket.close();
    }
}

顺便说一下,下一个例子(knock-knock服务器)确实有效,并提供了一个使用'协议'类的好例子。

为了将来参考,默认情况下通常禁用echo服务。 我正在使用Windows 7,启用它我按照此处的说明操作:

http://www.windowsnetworking.com/articles_tutorials/windows-7-simple-tcpip-services-what-how.html

之后示例对我来说很好。

对于XP:

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/sag_tcpip_pro_simptcpinstall.mspx?mfr=true

我不认为echo服务默认运行,当我在Win XP客户端上尝试快速测试时,它不起作用:

H:\>telnet localhost 7
Connecting To localhost...Could not open connection to the host, on port 7: 
Connect failed

H:\>

因此,为了使您的代码工作,您可以尝试将其指向运行echo服务的服务器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM