Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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 - Fatal编程技术网

同时充当客户机和服务器的客户机-JAVA

同时充当客户机和服务器的客户机-JAVA,java,Java,我有一个有趣的问题。我试图建立一个点对点连接,这意味着客户端进程同时充当服务器和客户端。理想情况下,它应该有一个客户端套接字(套接字类)和一个服务器套接字(服务器套接字类)。现在我尝试使用这个概念,但它不起作用。请看一下: public static void main(String argv[]) throws Exception { Socket clientSocket = null; BufferedReader inFromUser = new BufferedR

我有一个有趣的问题。我试图建立一个点对点连接,这意味着客户端进程同时充当服务器和客户端。理想情况下,它应该有一个客户端套接字(套接字类)和一个服务器套接字(服务器套接字类)。现在我尝试使用这个概念,但它不起作用。请看一下:

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

  Socket clientSocket = null;


  BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
  DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());



 System.out.println("Enter the server port u want to be assigned to this peer:"); 
 sentence = inFromUser.readLine(); 
 System.out.println("writing current port to client = "+ sentence);
 outToServer.writeBytes("p~"+sentence + "\n" );

 int serverport = Integer.parseInt(sentence);

ServerSocket server = new ServerSocket(serverport);
Socket client;
//client 
System.out.println("enter port no of the server port of an other peer:");
               int msg=Integer.parseInt(inFromUser.readLine());
               clientSocket = new Socket("localhost", msg);
                outToServer = new DataOutputStream(clientSocket.getOutputStream());
               outToServer.writeBytes("hi");

    while(true)
    {
         //server port listens infinitely and spawns new thread
          System.out.println("inside true");
       client = server.accept();
      Thread serverThread = new Thread(new acceptconnection1(client));
        serverThread.start();

    }}}

class acceptconnection1 implements Runnable {
 BufferedReader inFromClient, inn; 
 DataOutputStream ds;
 Socket socket;
  int peersocket;

 String clientSentence;

         int serverport ;

    Socket clientSocket = null;
acceptconnection1 (Socket socket,) throws IOException{

this.socket = socket;

 inn = new BufferedReader (new InputStreamReader(System.in));
      inFromClient =new BufferedReader(new InputStreamReader(socket.getInputStream()));
  ds = new DataOutputStream(socket.getOutputStream());
}

@Override
public void run () {

        String cs,a;
    try {
            System.out.println("waiting for connection ");

             if(( clientSentence = inFromClient.readLine())!=null)
             {

            System.out.println("Message from other peer" + clientSentence);

             }


    } catch (IOException ex) {
        Logger.getLogger(acceptconnection1.class.getName()).log(Level.SEVERE, null, ex);
    }}}
输出: 当我创建两个客户端进程时

客户1的o/p: 输入要分配给该对等服务器的服务器端口u: 1111 将当前端口写入客户端=1111 hi输入您不想连接的端口号: 2222 内在真实 内在真实 正在等待连接

输入要分配给该对等服务器的服务器端口u: 2222 将当前端口写入客户端=2222 hi输入您不想连接的端口号: 1111 内在真实 内在真实 正在等待连接


发生的事情是他们都在等待连接。如何解决此问题?

您遇到了死锁情况。为此,首先创建ServerSocket,以便套接字可以与之通信。创建将连接但在接受之前不执行任何操作的套接字。然后接受连接


顺便说一句:你不需要创建两个连接让流量双向通过。一旦建立了连接,您就可以将该连接用作客户机-服务器、服务器-服务器或其他任何连接。

这是否与您之前提出的问题大致相同:?您给我们的代码至少应该引发NullPointerException。请给我们真实的代码,或者更好、更正确的摘录。1)为了更快地获得更好的帮助,请发布一篇文章。2) 请对代码块使用一致的逻辑缩进。我开始重新格式化代码以使其更具可读性,但我放弃了…嗨,彼得,我首先创建服务器套接字。。你能给我一个详细的解释吗?一旦两端创建了一个套接字,你就可以从两端使用这个套接字。到底是哪一方造成的并不重要。