本地電腦使用客戶端,阿里雲服務器使用遠程桌面用服務器端
測試代碼如下(代碼來源於網絡,已測試通過):
客戶端:

1 import java.net.*; 2 import java.io.*; 3 import java.util.concurrent.ExecutionException; 4
5 public class TcpClient { 6 public static void main(String[] args) throws Exception{ 7 try{ 8 //建立套接字
9 Socket socket = null; 10 socket = new Socket(); 11 socket.connect(new InetSocketAddress("服務端ip",7327),8000); 12 //建立連接
13 InputStreamReader Sysin = new InputStreamReader(System.in); 14 BufferedReader SysBuf = new BufferedReader(Sysin); 15
16 InputStreamReader Socin = new InputStreamReader(socket.getInputStream()); 17 BufferedReader SocBuf = new BufferedReader(Socin); 18
19 PrintWriter Socout = new PrintWriter(socket.getOutputStream()); 20
21 //進行通信
22 String readline = SysBuf.readLine(); 23 while(!readline.equals("bye")){ 24 Socout.println(readline); 25 Socout.flush(); 26 //System.out.println("Client:"+readline);
27
28 System.out.println("Server:"+SocBuf.readLine()); 29 readline = SysBuf.readLine(); 30 } 31
32 //關閉IO和Socket
33 Socout.close(); 34 Socin.close(); 35 socket.close(); 36 } catch (Exception e){ 37 System.out.println("Error:"+e); 38 } 39 } 40 }
服務端:

1 import java.net.*; 2 import java.io.*; 3 import java.util.concurrent.ExecutionException; 4
5 public class TcpServer { 6 public static void main(String [] args) throws Exception{ 7 try{ 8 //建立套接字
9 ServerSocket server = new ServerSocket(7327); 10 //監聽
11 Socket socket = server.accept(); 12 //建立連接
13 InputStreamReader Sysin = new InputStreamReader(System.in); 14 BufferedReader SysBuf = new BufferedReader(Sysin); 15
16 InputStreamReader Socin = new InputStreamReader(socket.getInputStream()); 17 BufferedReader SocBuf = new BufferedReader(Socin); 18
19 PrintWriter Socout = new PrintWriter(socket.getOutputStream()); 20
21 //通信
22 System.out.println("Client:" + SocBuf.readLine()); 23 String readline = SysBuf.readLine(); 24 while(!readline.equals("bye")){ 25 Socout.println(readline); 26 Socout.flush(); 27 //System.out.println("Server:" + readline);
28
29 String rl = SocBuf.readLine(); 30 if(!rl.equals("ok")) 31 System.out.println("Client:"+rl); 32 else
33 break; 34
35 readline = SysBuf.readLine(); 36 } 37
38 //關閉IO/socket
39 Socout.close(); 40 Socin.close(); 41 server.close(); 42 } catch (Exception e){ 43 System.out.println("Error:"+e); 44 } 45 } 46 }
實現的功能是雙方對話實時通信,先是client說話,然后服務器再說話,以bye和ok結束通話。
我的問題解決過程:
1:本地電腦同時運行客戶端與服務器端正常!ip當然是本機電腦啦,我用的localhost也ok。
2:服務器(阿里雲)同時運行客戶端與服務端正常!ip是服務端私網,注意這一點!(注意,先運行服務端代碼,因為服務器的一些端口已經被占用了,比如別人好使的12345端口我使用就不行,服務器端會告訴你端口不可使用,你隨意更改一下就ok了)。
3:本機運行客戶端,服務器運行服務端,ip是服務器私網時報錯連接超時,ip時服務器公網時也是同樣錯誤!嘗試使用本機ping私網(剛開始還不知道是私網),請求超時,當然啦,私網是那么容易給外網用的嗎?請求超時太常見了,而阿里雲給外網用的ip是公網啊各位!所以我的主機只能使用公網,ping公網正常。
解決方案:
登錄阿里雲服務器,去安全組規則中添加入方向規則,添加你之前用的端口號就Ok啦,然后再測試就ok了。
就是這個——>添加規則