本地电脑使用客户端,阿里云服务器使用远程桌面用服务器端
测试代码如下(代码来源于网络,已测试通过):
客户端:

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了。
就是这个——>添加规则