美文网首页
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在阿里云上实现与客户端程序的通信

    在上一篇《java Socket实现服务器与客服端的简单通信》简单的实现服务端程序和客户端程序在myeclipse...

  • IOS-Socket概念和通信流程(一)

    Socket概念 Socket又称"套接字" 网络上的2个程序(客户端,服务端)通过一个双向的通信连接实现数据的交...

  • day017 笔记 08-07

    socket套接字 通过socket实现服务器端 通过socket实现客户端 多次通信(服务器端) 多次通信(客户...

  • Netty实现客户端与服务端通信

    实现一个客户端与服务端通信的程序,可以使用socket网络编程来实现,而Netty作为一个封装了JDK的NIO通讯...

  • Android中Socket编程(一)

    Socket通信简介 Java Socket可实现客户端-服务端的双向实时通信。在java.net包中定义了两个类...

  • Java学习5-socket通信(2)

    基于TCP协议的socket通信 目标:了解概念,通信模型,实现socket的步骤,服务端和客户端应该做些什么 什...

  • Python_unix domain socket(域套接字)

    业务上需要实现romd与superd通信,采用的通信协议是:unix domain socket 简介 Unix ...

  • Socket 网络通信

    一、概念 Socket 字面意思又称“套接字” 网络上的两个程序(如,客户端和服务器端)通过一个双向的通信连接实现...

  • day 17

    part 1 网络通信 socket套接字:指的就是通过代码来创建实现通信的两个端(服务器和客户端)socket一...

  • 网络通信

    Socket:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 网络通信...

网友评论

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

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