使用socket通信本地电脑与阿里云服务器报错connection time out及解决方案(java语言)


本地电脑使用客户端,阿里云服务器使用远程桌面用服务器端

测试代码如下(代码来源于网络,已测试通过):

客户端:

 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 }
client

服务端:

 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 }
server

实现的功能是双方对话实时通信,先是client说话,然后服务器再说话,以bye和ok结束通话。

我的问题解决过程:

1:本地电脑同时运行客户端与服务器端正常!ip当然是本机电脑啦,我用的localhost也ok。

2:服务器(阿里云)同时运行客户端与服务端正常!ip是服务端私网,注意这一点!(注意,先运行服务端代码,因为服务器的一些端口已经被占用了,比如别人好使的12345端口我使用就不行,服务器端会告诉你端口不可使用,你随意更改一下就ok了)。

3:本机运行客户端,服务器运行服务端,ip是服务器私网时报错连接超时,ip时服务器公网时也是同样错误!尝试使用本机ping私网(刚开始还不知道是私网),请求超时,当然啦,私网是那么容易给外网用的吗?请求超时太常见了,而阿里云给外网用的ip是公网啊各位!所以我的主机只能使用公网,ping公网正常。

解决方案:

登录阿里云服务器,去安全组规则中添加入方向规则,添加你之前用的端口号就Ok啦,然后再测试就ok了。

就是这个——>添加规则

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM