使用IP地址时,java无法写入socket
这是我的服务器的代码:
public class Server {
public static void main(String[] args) {
new Server().go();
}
public void go() {
try {
@SuppressWarnings("resource")
ServerSocket serverSocket = new ServerSocket(5000);
while(true) {
Socket clientSocket = serverSocket.accept();
Thread t = new Thread(new ClientHandler(clientSocket));
t.start();
System.out.println("Connection");
}
} catch(Exception e) {
e.printStackTrace();
}
}
public class ClientHandler implements Runnable {
private BufferedReader br;
private Socket socket;
private InputStream is;
public ClientHandler(Socket clientSocket) {
try {
socket = clientSocket;
is = socket.getInputStream();
} catch(Exception e) {
e.printStackTrace();
}
}
public void run() {
try {
int k;
while ((k = is.read()) != -1)
System.out.print((char) k);
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
这就是客户:
public class Client {
public static void main(String[] args) {
new Client().connect();
}
public void connect() {
try {
Thread.sleep(100);
Socket socket = new Socket("localhost", 5000);
OutputStream out = socket.getOutputStream();
out.write("Hello World!".getBytes());
out.flush();
System.out.println("Written");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
客户端我连接到localhost,一切正常。但只要我通过IP/DynDNS地址替换“localhost”,服务器就会打印出“Connection”,但不会收到消息。但是,当我添加socket时。close(),则消息已发送。为什么我必须添加socket。如果我使用我的IP而不是“localhost”,close()可以发送消息吗? 我认为这也是我的安卓设备无法连接到服务器的原因。服务器打印出“Connection”,但我不能写消息(只要我在之后立即关闭socket,或者调用socket.shutDownOutput()。 我在路由器和防火墙上启动了端口转发,但现在我没有主意了。。。为什么我有联系却不会写
编辑:我不需要完全关闭插座,我只需要关闭PrintWriter。但为什么
共 (0) 个答案