无法使用cmd运行TCP客户端/服务器代码

时间:2015-04-19 15:10:44

标签: java tcp cmd

我有这段代码,但它并没有使用Windows在cmd上运行。这是第一次这样做。当我尝试运行服务器时,没有响应(没有错误,但无法继续输入,没有任何反应,对于client1也是如此。

这是服务器的代码:

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

public class outputStream

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

     // initialises Server Socket 
     ServerSocket welcomeSocket = new ServerSocket (1337);

    // waits for the connection of two clients C1 and C2 (in either order)
      while (true) {
        Socket socket1 = welcomeSocket.accept();
        Socket socket2 = welcomeSocket.accept();

        //gets input streams of the clients
        BufferedReader inFromclient1 = new BufferedReader (new InputStreamReader(socket1.getInputStream()));  
        BufferedReader inFromclient2 = new BufferedReader (new InputStreamReader(socket2.getInputStream()));
        //reads the data
        String client1Sentence = inFromclient1.readLine();
        String client2Sentence = inFromclient2.readLine();

        //get output streams of the clients 
        BufferedWriter outToclient1 = new BufferedWriter (new OutputStreamWriter (socket1.getOutputStream ()));
        BufferedWriter outToclient2 = new BufferedWriter (new OutputStreamWriter (socket2.getOutputStream ()));

        //replies to clients 
        String reply1 = " ";
        String reply2 = " ";

        if (client1Sentence.equals(client2Sentence)){
            reply1 = "xxxxx\n";
            reply2 = "yyyyy\n";
        } else if (client1Sentence.equals ('y') && client2Sentence.equals ('z')) {
           reply1 = "xxx\n";
           reply2 = "yyyyyy";
        }
         else if (client1Sentence.equals ('z') && client2Sentence.equals ('y')) {
           reply1 = "xxxx\n";
           reply2 = "yyyy\n";
        } 
        else if (client1Sentence.equals ('y') && client2Sentence.equals ('x')) {
           reply1 = "xxxxxxxx\n";
           reply2 = "yyyyy\n";
        } 
        else if (client1Sentence.equals ('P') && client2Sentence.equals ('R')) {
           reply1 = "xxxxxxx\n";
           reply2 = "yyyy\n";
        } 
         else if (client1Sentence.equals ('z') && client2Sentence.equals ('x')) {
           reply1 = "xxxx\n";
           reply2 = "yyyyyyy\n";
        } 
        else if (client1Sentence.equals ('x') && client2Sentence.equals ('z')) {
           reply1 = "xxxxx\n";
           reply2 = "yyyyyyy\n";
        } 


         //sends reply to clients 
        outToclient1.write(reply1,0,reply1.length());
        outToclient2.write(reply2,0, reply2.length());


        //ends connection
        outToclient1.flush();
        outToclient2.flush();  
     }
}
}

This is the code for Client1:

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

public class client1
{
    /**
     * Constructor for objects of class clientTCP
     */
    public static void main (String args[]) throws Exception {

        //intialises input/outputStream
        BufferedReader inFromUser = new
        BufferedReader (new InputStreamReader (System.in)); 

        //intialises client Socket
        Socket clientSocket = new Socket ("localhost",1337);

        //fetches input/outputSteam
        BufferedReader inFromServer = new BufferedReader (new InputStreamReader(clientSocket.getInputStream())); 
        BufferedWriter outToServer = new BufferedWriter (new OutputStreamWriter(clientSocket.getOutputStream ()));


        //sends message to server and closes server connection
        String sentence = inFromUser.readLine();
        outToServer.write (sentence + "\n", 0, sentence.length()+1);
        outToServer.flush();

        //server reads line from client 
        String ack = inFromServer.readLine();

        //server replies to client
        System.out.println ("FROM SERVER:" + ack);

        // client socket is closed 
        clientSocket.close();   
    }
}

2 个答案:

答案 0 :(得分:0)

welcomeSocket.accept()将阻止,直到客户端连接,因此除非您运行两个客户端和一个服务器,否则不会发生任何事情

答案 1 :(得分:0)

问题在于使用equals(),参数应该用双引号括起来而不是单引号。