我有这段代码,但它并没有使用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();
}
}
答案 0 :(得分:0)
welcomeSocket.accept()
将阻止,直到客户端连接,因此除非您运行两个客户端和一个服务器,否则不会发生任何事情
答案 1 :(得分:0)
问题在于使用equals()
,参数应该用双引号括起来而不是单引号。