Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 488|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-2 14:30:21 | 显示全部楼层 |阅读模式

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

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

    客户端:

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

    就是这个——>添加规则

     

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-1 12:46 , Processed in 0.057445 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表