美文网首页
socket在阿里云上实现与客户端程序的通信

socket在阿里云上实现与客户端程序的通信

作者: guanalex | 来源:发表于2017-11-26 16:09 被阅读255次

    在上一篇《java Socket实现服务器与客服端的简单通信》简单的实现服务端程序和客户端程序在myeclipse中分别运行时,能够进行简单的通信,也就是在本机上实现的。那么如何在一个云服务器上部署你的服务器端程序来实现与客户端的通信呢?

    云服务器的搭建(Windows server)

    我这里是手工一步一步搭建的开发环境,也就是和我们平时在自己的机子中布置的坏境一样,只不过是把这些东西放到购买的阿里云主机上而已。不过这些东西怎么放过去呢?这个有几种方法,不懂的可以去百度就是了,其中比较简单的就是用自己的电脑操纵远程云主机了,打开电脑的运行,在运行处输入mstsc回车,就会出现如下界面。其中计算机名是阿里云的公网ip地址。

    远程桌面图

    点击显示选项,再点击本地资源下面的详细信息,然后选择你要在云主机上把文件拿到的磁盘,即在云主机上能够看得到的磁盘,以便在云主机上直接拿去资源。如下图

    详细信息图

    接下来就是在你本机上下载Tomcat,mysql等到指定盘,然后就可以在云主机上拿去安装了,环境搭建基本这样就完成了。

    servletcontextlistener监听器

    这个东西才是重点和关键的一步,之前我们用socket来实现监听某个端口发来的数据,在同一台主机上是实现了通信。但是在Tomcat上就有些不一样了,接下来我们来讲解一下servletcontextlistener,servlet容器中有个接口为ServletContextListener,ServletContextListener是对ServeltContext对象的一个监听。当web服务器启动时就会自动去创建这个对象,由于一个web应用只有一个ServletContext,所有的servlet都要共享他,所以servlet对象之间可以通过ServletContext对象来实现通讯该对象带有两个方法,一个是contextInitialized(ServletContextEvent event)该方法创建对象时自动调用,还有一个就是contextDestroyed(ServletContextEvent event)
    关闭时自动销毁。说白了就是相当于http协议的dopost()和doget()方法,我们只需知道大概是这样用的,至于里面的结构不用太清楚。
    我们只需去写一个普通类去实现这个接口,那怎么实现呢?看下面的代码

    package tomcatsocket;
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    
    
    public class TomcatServer implements ServletContextListener {
    
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
        
    }
    public void contextInitialized(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
    //    final boolean exit=true;
         Thread thread =new Thread(new Runnable() {
            
            public void run() {
                // TODO Auto-generated method stub
             try {
                ServerSocket server=new ServerSocket(9996);
                 while(true){
                     Socket serverSocket =server.accept();//用新线程来开启是为了防止Tomcat监听器启动时被堵塞。
                     OutputStream OS=serverSocket.getOutputStream();
                     PrintWriter pw=new PrintWriter(OS);
                     pw.write("收到客户端消息");
                     pw.flush();
                     serverSocket.close();
                     serverSocket=null;
                 }
            
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            }
        });
         thread.start();
        
    }
    
    }
    

    最后别忘了在web.xml下配置

    在阿里云上实现

    在阿里云上我们就需要配置一些东西了,不然我们指定的端口不被访问。首先我们登录阿里云的控制台 阿里云控制台

    然后进入安全组配置相应指定的端口


    添加安全组

    接下来就是把我们写好的服务端程序项目放到Tomcat服务器的webapp下,启动服务器就能能访问了。

    相关文章

      网友评论

          本文标题:socket在阿里云上实现与客户端程序的通信

          本文链接:https://www.haomeiwen.com/subject/zvdkbxtx.html