java - 示例套接字应用程序不起作用

标签 java sockets

我正在研究java.net并尝试制作一个简单的应用程序。这是代码:

编辑:我的错,抱歉,但主要问题仍然存在。这是更正后的代码:

public static void main(String args[]){
        try{

            Socket s = new Socket("localhost", 3128);
            args[0] = args[0]+"\n"+s.getInetAddress().getHostAddress()
                    +":"+s.getLocalPort();
            s.getOutputStream().write(args[0].getBytes());

            byte buf[] = new byte[64*1024];
            int r = s.getInputStream().read(buf);
            String data = new String(buf, 0, r);

            System.out.println(data);
        } catch(Exception e){
            System.out.println("init error: "+e);
        }
    }

但是当我尝试启动它时,出现以下错误:

init error: java.lang.ArrayIndexOutOfBoundsException: 0

这可能的原因是什么?

UPD:这是其余的跟踪:

/usr/lib/jvm/jdk1.7.0_13/bin/java -Didea.launcher.port=7535 -Didea.launcher.bin.path=/home/mikhail/Загрузки/idea-IU-123.155/bin -Dfile.encoding=UTF-8 -classpath /usr/lib/jvm/jdk1.7.0_13/jre/lib/jce.jar:/usr/lib/jvm/jdk1.7.0_13/jre/lib/jfr.jar:/usr/lib/jvm/jdk1.7.0_13/jre/lib/deploy.jar:/usr/lib/jvm/jdk1.7.0_13/jre/lib/rt.jar:/usr/lib/jvm/jdk1.7.0_13/jre/lib/javaws.jar:/usr/lib/jvm/jdk1.7.0_13/jre/lib/jfxrt.jar:/usr/lib/jvm/jdk1.7.0_13/jre/lib/resources.jar:/usr/lib/jvm/jdk1.7.0_13/jre/lib/jsse.jar:/usr/lib/jvm/jdk1.7.0_13/jre/lib/management-agent.jar:/usr/lib/jvm/jdk1.7.0_13/jre/lib/plugin.jar:/usr/lib/jvm/jdk1.7.0_13/jre/lib/charsets.jar:/usr/lib/jvm/jdk1.7.0_13/jre/lib/ext/dnsns.jar:/usr/lib/jvm/jdk1.7.0_13/jre/lib/ext/sunec.jar:/usr/lib/jvm/jdk1.7.0_13/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/jdk1.7.0_13/jre/lib/ext/zipfs.jar:/usr/lib/jvm/jdk1.7.0_13/jre/lib/ext/localedata.jar:/usr/lib/jvm/jdk1.7.0_13/jre/lib/ext/sunjce_provider.jar:/home/mikhail/bzrrep/DLP/producer/target/classes:/home/mikhail/.m2/repository/commons-lang/commons-lang/2.3/commons-lang-2.3.jar:/home/mikhail/.m2/repository/org/apache/pdfbox/pdfbox/1.8.0/pdfbox-1.8.0.jar:/home/mikhail/.m2/repository/org/apache/pdfbox/fontbox/1.8.0/fontbox-1.8.0.jar:/home/mikhail/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar:/home/mikhail/.m2/repository/org/apache/pdfbox/jempbox/1.8.0/jempbox-1.8.0.jar:/home/mikhail/Загрузки/idea-IU-123.155/lib/idea_rt.jar com.intellij.rt.execution.application.AppMain com.messagedna.dlp.main.Main

最佳答案

what is the possible reason of this?

ArrayIndexOutOfBoundsException的原因是你没有向你的程序传递任何参数。因此,args[0]不引用有效的数组索引(顺便说一句:我会创建一个单独的局部变量,而不是分配给 args[] 数组。从技术上讲,这是可能的,但我不认为这是“好风格”)。

当您向程序传递参数时,您将得到 NullPointerException因为你还没有配置你的套接字。您至少需要将其连接到某个服务器,例如像这样:

s.connect(new InetSocketAddress("myserver.example.com", 1234));

然后,当“myserver.example.com”的端口 1234 上有适当的服务器运行时,您将能够发送和接收一些数据。

有关 Java 网络编程的更多信息,您应该浏览 Sockets tutorial .

关于java - 示例套接字应用程序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17652169/

相关文章:

java - 如何只打开CHM文件的一个实例?

java - 如何接收通过 TCP 套接字发送的相同消息?

python - 是否可以使用UDP进行透明代理?

Java:对象输入流+套接字

sockets - 以独立于浏览器的方式查看用户正在访问哪个网站

java - 对 glGetString() 的静态调用在 Android 5.0 中返回 null

java - 从 tomcat6 发送多部分邮件时出现 IllegalStateException

java - 为多个对象提供服务的 GWT 服务

java - App Engine 上的 getObjectById

ios - 使用 Socket 从浏览器读取请求后如何发送响应? (我正在使用 SwiftSocket)