Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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套接字编程,双向通信_Java_Sockets - Fatal编程技术网

Java套接字编程,双向通信

Java套接字编程,双向通信,java,sockets,Java,Sockets,我试图在服务器和客户端之间创建一种双向通信,在这种通信中,双方(服务器和客户端)可以互相发送消息,而不必等待另一方响应。为此,我创建了一个单独的线程来监听套接字并在屏幕上打印传入消息。真正的问题是:第一次编译并运行服务器和客户端时,当我运行程序之后,一切正常,我从服务器和客户端都收到了这个错误消息 java.net.ConnectException: Connection refused (Connection refused) at java.net.PlainSocketImpl.socke

我试图在服务器和客户端之间创建一种双向通信,在这种通信中,双方(服务器和客户端)可以互相发送消息,而不必等待另一方响应。为此,我创建了一个单独的线程来监听套接字并在屏幕上打印传入消息。真正的问题是:第一次编译并运行服务器和客户端时,当我运行程序之后,一切正常,我从服务器和客户端都收到了这个错误消息

java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:211)
at Build.work(c.java:18)
at s.main(s.java:83)

Exception in thread "Thread-0" Exception in thread "main" java.lang.NullPointerException
at Build.run(c.java:59)
at java.lang.Thread.run(Thread.java:748)

java.lang.NullPointerException
at Build.speak(c.java:35)
at c.main(c.java:85)
客户

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

class Build implements Runnable
{
    String ip = "127.0.0.1";
    int  port = 3500;
    String input1;
    Socket socket;
    DataInputStream in;
    DataOutputStream out;
    Console reader;

    public void work()
    {
        try
        {
            socket = new Socket(ip, port);
            in = new DataInputStream(socket.getInputStream());
            out = new DataOutputStream(socket.getOutputStream());
            reader = System.console();
        }

        catch(IOException e){
        e.printStackTrace();}
    }

    public void speak()
    {
        try
        {
            while(true)
            { 
                input1 = reader.readLine();
                out.writeUTF(input1);
                if(input1.equals("stop"))
                {
                    in.close();
                    out.close();
                    socket.close();
                    System.exit(0);
                 }              
             }
         }
         catch (IOException e){
         e.printStackTrace();}
     }

     public void run()
     {
         String input2;

         try
         {
             while(true)
             {
                 input2 = in.readUTF();
                 System.out.println(input2);
                 if(input2.equals("stop"))
                 {
                     in.close();
                     out.close();
                     socket.close();
                     System.exit(0);
                 }
              }
         }
         catch(IOException e){
         e.printStackTrace();}
     }

}

public class client
{
    public static void main(String[]args)
    {
        Build object = new Build();
        object.work();
        Thread t1 = new Thread(object);
        t1.start();
        object.speak();
    }
}

这里没有服务器。服务器将创建一个
ServerSocket
,然后开始调用
accept()

你这里只有两个客户


您还可能会混淆
readUTF()
readLime()
readUTF()
只能读取由
writeUTF()
编写的数据,而
readLine()
不能。

@arghavan没有“after”这样的词。您的编辑没有“增加可读性”,它从根本上改变了问题。不要那样做。谢谢你指出这一点!我一定是在格式化代码时弄错了什么。问题仍然存在,我收到了相同的错误消息。EJP您是否提出了一个有效的解决方案来创建双向通信?除非您展示您当前的代码。我们无法读懂你的心思。修正!对不起,麻烦了:)
import java.net.*;
import java.io.*;

class Build implements Runnable
{
    String ip = "127.0.0.1";
    int  port = 3500;
    String input1;
    Socket socket;
    DataInputStream in;
    DataOutputStream out;
    Console reader;

    public void work()
    {
        try
        {
            socket = new Socket(ip, port);
            in = new DataInputStream(socket.getInputStream());
            out = new DataOutputStream(socket.getOutputStream());
            reader = System.console();
        }

        catch(IOException e){
        e.printStackTrace();}
    }

    public void speak()
    {
        try
        {
            while(true)
            { 
                input1 = reader.readLine();
                out.writeUTF(input1);
                if(input1.equals("stop"))
                {
                    in.close();
                    out.close();
                    socket.close();
                    System.exit(0);
                 }              
             }
         }
         catch (IOException e){
         e.printStackTrace();}
     }

     public void run()
     {
         String input2;

         try
         {
             while(true)
             {
                 input2 = in.readUTF();
                 System.out.println(input2);
                 if(input2.equals("stop"))
                 {
                     in.close();
                     out.close();
                     socket.close();
                     System.exit(0);
                 }
              }
         }
         catch(IOException e){
         e.printStackTrace();}
     }

}

public class client
{
    public static void main(String[]args)
    {
        Build object = new Build();
        object.work();
        Thread t1 = new Thread(object);
        t1.start();
        object.speak();
    }
}