Window connect to Linux over TCP/IP by java.

[list]
[*]1. Create a client.
[*]2. Create a server.
[*]3. Close firewall on Linux.
[/list]

[b]1. Create a client[/b]


package com.chris.client;

import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;


import java.net.UnknownHostException;

public class Client {

public static void main(String[] args) throws UnknownHostException, IOException {

Socket client = new Socket( "192.168.104.164", 8888 );
System.out.println( client.isBound() );
PrintStream writer = new PrintStream( client.getOutputStream() );
writer.println(" HelloLinux, I'm come from Windows environment");
writer.close();
}

}


[b]2. Create a Server[/b]


package com.chris.server;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

public void createServer() throws IOException, InterruptedException {

ServerSocket server = new ServerSocket( 8888 );


Socket s = server.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(s
.getInputStream()));


char[] buffer = new char[1024];
StringBuilder sb = new StringBuilder(1024 * 1024);
int size = -1;
while ((size = reader.read(buffer)) != -1) {
String temp = new String(buffer, 0, size);
sb.append(temp);
}
System.out.println( sb.toString());
reader.close();

}

public static void main(String[] args) {

Server server = new Server();
try {
server.createServer();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}


以上的程序如果只是在本地測試,那麼可以正常的通過, 但是當我把服務器程序放到Linux系統下(另外一臺機器), 而Client部分放到Windows平臺下跑時,系統就包下面的異常了

Exception in thread "main" java.net.NoRouteToHostException: No route to host: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:179)
at com.chris.client.Client.main(Client.java:14)


後面通過查找相關資料, 發現是Linux防火牆沒有關的的原因導致的。
[b]3. Close firewall on Linux[/b]

到Shell窗口下,鍵入service iptables stop, 重新聯接, OKay了

如果要重新啓動防火牆則輸入service iptables start

總結:

是否有其它的方式沒有, 如果有, 請不賜教:)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章