【发布时间】:2017-09-11 03:55:44
【问题描述】:
我在下面有我的服务器代码:
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()做了什么,但我猜它绑定到您指定范围内的随机未使用端口?确保您的客户端知道它绑定到哪个端口。 -
@cricket 是的,我刚刚注意到并更改了它。那是我的打字错误。我现在已将其更改为我帖子中的正确代码。
-
@cricket_007 是的,我已经遵循了那个 turoial。
-
@1290 他们需要使用相同的端口。您的客户端正在尝试在它未侦听的端口上与服务器通信。
标签: java