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

主宰稳场 提交于 2021-02-03 06:00:47

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

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

客户端:

 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了。

就是这个——>添加规则

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!