下面我有我的服务器代码在这里:服务器不发送回一个确认信息给客户
public void startServer() {
ServerSocket listener = selectUnusedPortFromRange(1024, 65535);
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
String command = null;
while (true) {
Socket socket = listener.accept();
System.out.println("Got a connection from: " + socket.getLocalPort());
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
command = in.readLine();
System.out.println("GOT HERE"); //Not being printed out
if (command != null && !"".equals(command)) {
if ("connection".equals(command)) {
Writer writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.write("success\n");
writer.flush();
}
}
}
}
}
}
t.start();
}
这是我的客户端:
public void makeConnection() {
try {
Socket socket = new Socket(IP, PORT);
Writer writer = new PrintWriter(socket.getOutputStream(), true);
writer.write("connection\n");
BufferedReader socketRead = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str;
while ((str = socketRead.readLine()) != null) {
if ("success".equals(str)) {
System.out.println("Successfully saved all hosts to: " + listOfHosts.get(i));
socketRead.close();
socket.close();
iStream.close();
writer.close();
}
}
}catch (Exception e) {
System.out.println(e.getMessage());
}
}
在客户端后,我创造我插座连接到服务器我写入“连接”到套接字的outputStream
,并等待服务器回应确认成功。出于某种原因,连接不会发送到服务器。在服务器System.out.println("Got a connection from: " + socket.getLocalPort());
这一行没有被打印出来。
有没有什么问题,我正在做。我无法发现它。当我尝试连接到我的服务器时,我没有收到异常。
进行仔细的检查...你的客户端是否使用服务器绑定的同一端口?我不知道'selectUnusedPortFromRange()'做了什么,但我的猜测是它绑定到指定范围内的一个随机未使用的端口?确保你的客户知道它绑定到哪个端口。 – SnakeDoc
@cricket是的,我刚刚注意到并改变了它。那是我的打字错误。我已经将其更改为我的帖子中的正确代码。 – CapturedTree
看过这个吗? https://docs.oracle.com/javase/tutorial/networking/sockets/readingWriting.html –