精华内容
下载资源
问答
  • SocketServerSocket简单介绍及例子

    万次阅读 多人点赞 2018-07-12 14:51:17
     socket可以使一个应用从网络中读取写入数据,不同计算机上两个应用可以通过连接发送接受字节流,当发送消息时,你需要知道对方ip端口,在java中,socket指是java.net.Socket类。  在java.net.Socket...

    自制工具   翰华Box:https://hanhuabox.lanzous.com/b00zjq9uf

    翰华Box - 开发日志:https://blog.csdn.net/qq_41517936/article/details/106409456

    【翰华Box】RPG移动迷宫:https://blog.csdn.net/qq_41517936/article/details/107256044

    Socket 类

      socket可以使一个应用从网络中读取和写入数据,不同计算机上的两个应用可以通过连接发送和接受字节流,当发送消息时,你需要知道对方的ip和端口,在java中,socket指的是java.net.Socket类。 
      在java.net.Socket中,可以看到socket有多种构造函数 
       
      这里写图片描述

      以public Socket(String host, int port)为例,host为远程机器名称或ip地址,port为端口号。若连接本地的Server,其端口号为8080,可以写成如下格式 
      new Socket(“localhost”, 8080); 
      一旦成功创建一个Socket类的实例,可以用它来发送和接收字节流,发送时调用getOutputStream方法获取一个java.io.OutputStream对象,接收远程对象发送来的信息可以调用getInputStream方法来返回一个java.io.InputStream对象。 

      

    ServerSocket类

    ServerSocket详解https://www.jianshu.com/p/665994c2e784

      Socket类代表一个客户端套接字,即任何时候连接到一个远程服务器应用时构建所需的socket。现在,要实现一个服务器应用,需要不同的做法。服务器需随时待命,因为不知道客户端什么时候会发来请求,此时,我们需要使用ServerSocket,对应的是java.net.ServerSocket类。 
      ServerSocket与Socket不同,ServerSocket是等待客户端的请求,一旦获得一个连接请求,就创建一个Socket示例来与客户端进行通信。 
      ServerSocket的构造函数也有多种重载形式: 
      这里写图片描述

      ServerSocket 有一个不带参数的默认构造方法。通过该方法创建的 ServerSocket 不与任何端口绑定,接下来还需要通过 bind()方法与特定端口绑定。这个默认构造方法的用途是,允许服务器在绑定到特定端口之前,先设置ServerSocket 的一些选项。因为一旦服务器与特定端口绑定,有些选项就不能再改变了。 
      例如

    ServerSocket serverSocket=new ServerSocket();
    serverSocket.setReuseAddress(true); //设置 ServerSocket 的选项
    serverSocket.bind(new InetSocketAddress(8080)); //与 8080 端口绑定

    把以上程序改成

    ServerSocket serverSocket=new ServerSocket(8080);
    serverSocket.setReuseAddress(true); //设置 ServerSocket 的选项
    •  

    那 么 serverSocket.setReuseAddress(true) 方 法 就 不 起 任何作用了 
      我们也可以使用如下构造函数创建一个ServerSocket实例

    ServerSocket serverSocket = new ServerSocket(port,3); 

      把连接请求队列的长度设为 3。这意味着当队列中有了 3 个连接请求时,如果 Client 再请求连接,就会被 Server拒绝,因为服务器队列已经满了。我们使用的 serverSocket.accept()方法就是从队列中取出连接请求。 
      总之, 
      客户端向服务器发送请求可分为以下步骤: 
      1.创建一个Socket实例 
      2.利用I/O流与服务器进行通信 
      3.关闭socket 
       
      服务器接收客户端请求步骤: 
      1.创建一个ServerSocket实例,监听客户端发来的请求。 
      2.与客户端获取连接后,创建一个Socket实例,利用I/O流与客户端进行通信,完毕后关闭Socket。

      当然,服务器可以接收多个客户端的请求,所以如果服务器是一个一个顺序相应肯定会带来不好的体验,因此使用多线程来为多个客户端提供服务 
    Client代码:

    package com.zhoufenqin.socket.client;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.Socket;
    
    public class Client {
        public static final int port = 8080;   
        public static final String host = "localhost";
        public static void main(String[] args) {    
            System.out.println("Client Start...");    
            while (true) {    
                Socket socket = null;  
                try {  
                    //创建一个流套接字并将其连接到指定主机上的指定端口号  
                    socket = new Socket(host,port);    
    
                    //读取服务器端数据    
                    BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));    
                    //向服务器端发送数据    
                    PrintStream out = new PrintStream(socket.getOutputStream());    
                    System.out.print("请输入: \t");    
                    String str = new BufferedReader(new InputStreamReader(System.in)).readLine();    
                    out.println(str);    
    
                    String ret = input.readLine();     
                    System.out.println("服务器端返回过来的是: " + ret);    
                    // 如接收到 "OK" 则断开连接    
                    if ("OK".equals(ret)) {    
                        System.out.println("客户端将关闭连接");    
                        Thread.sleep(500);    
                        break;    
                    }    
    
                    out.close();  
                    input.close();  
                } catch (Exception e) {  
                    System.out.println("客户端异常:" + e.getMessage());   
                } finally {  
                    if (socket != null) {  
                        try {  
                            socket.close();  
                        } catch (IOException e) {  
                            socket = null;   
                            System.out.println("客户端 finally 异常:" + e.getMessage());   
                        }  
                    }  
                }  
            }    
        }    
    }
    
    •  

    Server代码:

    package com.zhoufenqin.socket.server;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Server {
        public static final int port = 8080;//监听的端口号     
    
        public static void main(String[] args) {    
            System.out.println("Server...\n");    
            Server server = new Server();    
            server.init();    
        }    
    
        public void init() {    
            try {    
                //创建一个ServerSocket,这里可以指定连接请求的队列长度  
                //new ServerSocket(port,3);意味着当队列中有3个连接请求是,如果Client再请求连接,就会被Server拒绝 
                ServerSocket serverSocket = new ServerSocket(port);    
                while (true) {    
                    //从请求队列中取出一个连接
                    Socket client = serverSocket.accept();    
                    // 处理这次连接    
                    new HandlerThread(client);    
                }    
            } catch (Exception e) {    
                System.out.println("服务器异常: " + e.getMessage());    
            }    
        }    
    
        private class HandlerThread implements Runnable {    
            private Socket socket;    
            public HandlerThread(Socket client) {    
                socket = client;    
                new Thread(this).start();    
            }    
    
            public void run() {    
                try {    
                    // 读取客户端数据    
                    BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));    
                    String clientInputStr = input.readLine();//这里要注意和客户端输出流的写方法对应,否则会抛 EOFException  
                    // 处理客户端数据    
                    System.out.println("客户端发过来的内容:" + clientInputStr);    
    
                    // 向客户端回复信息    
                    PrintStream out = new PrintStream(socket.getOutputStream());    
                    System.out.print("请输入:\t");    
                    // 发送键盘输入的一行    
                    String s = new BufferedReader(new InputStreamReader(System.in)).readLine();    
                    out.println(s);    
    
                    out.close();    
                    input.close();    
                } catch (Exception e) {    
                    System.out.println("服务器 run 异常: " + e.getMessage());    
                } finally {    
                    if (socket != null) {    
                        try {    
                            socket.close();    
                        } catch (Exception e) {    
                            socket = null;    
                            System.out.println("服务端 finally 异常:" + e.getMessage());    
                        }    
                    }    
                }   
            }    
        }    
    }
    
    •  

    结果如下所示: 
    这里写图片描述 
    这里写图片描述

     

    展开全文
  • POI读取 word 2003 word 2007 的例子

    千次下载 热门讨论 2009-07-26 16:18:31
    这是一个POI读取word 2003 word 2007的例子,是一个Eclipse工程,下载后直接导入工程,运行 src 目录下的 Test.java 类即可, 这个 rar 包中包含着 POI 读取word 2003 word 2007 所需要的 jar 包,也有需要...
  • 构造器作用和例子

    万次阅读 多人点赞 2018-04-14 13:52:02
    构造器作用和例子构造器特点:1.方法名类名相等 2.没有返回值,并且不能用void(如果用void来声明其返回值类型,那么java会把这个构造器当做方法来处理——那它不再是构造器) 3.构造器中参数列表中参数...

    构造器的作用和例子

    构造器的特点:1.方法名和类名相等

                        2.没有返回值,并且不能用void(如果用void来声明其返回值类型,那么java会把这个构造器当做方法来处理——那它不再是构造器)

                        3.构造器中的参数列表中的参数可有可无

    说简单点构造器的作用就是创建对象。


    上面声明了三个带参数的构造器,他们之间的关系为重载,那我还可以再创建一个无参数的构造器吗?看下图:


    eclipse输出错误,提示我们这个无参数的构造器没有定义

    然后我把三个带参数的构造器给注释掉(忽略我的快捷注释...)


    然后再运行你会发现又可以了惊讶


    这可以说明一个问题:如果类中没有带参数的构造器,那我们可以使用一个隐藏的默认构造器来创建对象,如果类中有带参数的构造器,那默认的构造器就会被覆盖,所以才会出现我们刚才这样的问题。

    问题又来了:那我非要使用这个无参数的构造器怎么办?

    其实我们可以显式的定义默认构造器,那默认的构造器就能够使用了,如下图:


    这样就能解决上面那个问题了。

    有童鞋就发现我刚才定义的三个构造器中的是有重复代码的,如:this.name=name,这行代码分别在三个构造器中出现了一次,如下图:


    在此也补充上面一条博客this的用法


    我们可以这样改进:


    this(name,age): 表明调用该类中另外一个带两个参数的构造器

    注意:this在调用另外一个重载的构造器时,一定得作为构造器执行体的第一条语句!!!

    程序如果大佬有建议的话请指出,有问题欢迎在评论区提出,我会为你解疑答惑。



    展开全文
  • struts2的配置一个简单的例子

    万次阅读 多人点赞 2016-09-29 12:16:20
    例子的完整源码在文末,亲测没有任何错误。struts2 下载官网下载地址 最新版是2.5.2,这个版本一些jar包与旧版本不太一样,不过变化不大。 这里选择完整包(Full Distribution)下载。下载解压后文件...

    2019年03月04日更新:JavaWeb目前都是用Spring全家桶,如果不是项目要求,不需要再学struts2了
    ** 本文最后更新于<2017年12月06日> Struts2版本号:2.5.14.1**
    更新内容:struts2和相关lib的版本号,例子能够正确运行

    简介

    这篇文章主要讲如何在eclipse中使用struts2,文章使用的struts2的版本是2.5.14.1,
    会与其他的版本有一小点的差别,文章里已经说明。例子的完整源码在文末,亲测没有任何错误。

    struts2下载

    官网下载地址 USTC镜像站下载地址
    最新版是2.5.14.1,这个版本的一些jar包与旧版本不太一样,不过变化不大。
    具体的变化建议阅读2.5版本的 version-notes

    img
    图1 struts2下载页面

    这里选择完整的包(Full Distribution)下载。

    下载解压后的文件结构如下图:

    img

    图2 struts2文件结构图

    apps中是使用struts2的一些例子,docs是文档,包括帮助文档和api文档,lib是jar包,src中是源码。

    一个简单的例子

    eclipe

    环境

    需要的环境

    • tomcat 我使用的是:tomcat-8.0.42
    • jdk > 7 我使用的是:jdk-1.8.0_131<
    • eclipse 我使用的是:eclipse neon (4.6.2)

    首先保证tomcat能够正常运行,关于tomcat的配置这里就不讲了。

    详细的步骤

    • 新建一个WEB项目,名为HelloWorld
      在eclipse中建一个普通的WEB项目。保证项目能够运行。

      img

    • 添加相关的jar包
      把需要的jar包从struts2的lib目录复制到WEB-INF/lib文件夹下,最基础的需要8个jar包:
      commons-fileupload-1.3.3.jar、commons-io-2.5.jar、commons-lang3-3.6.jar、freemarker-2.3.26.jar、
      log4j-api-2.9.1.jar、ognl-3.1.15.jar、struts2-core-2.5.14.1.jar、javassist-3.20.0-GA.jar

      注意:struts2.5之前的版本有点不同,还需要xwork-core.jar,不需要log4j-api-2.7.jar。原因是struts2.5把xwork的源码
      合并到了struts-core中。struts2.5之前使用logging API,而struts2.5用log4j 2 API取代。
      如果你听从了我的建议,阅读了struts2.5的 version-notes ,你就能知道详细的原因。

      img

      图3 需要的jar包

    • 在web.xml中配置struts2框架的核心控制器StrutsPrepareAndExexuteFilter

      img

      图4 web.xml的配置

      Filter的完整类名struts2.5以前是 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。
      更多改变请阅读 struts2.5 version-notes

    • 在src目录下新建一个业务控制Action类,继承自com.opensymphony.xwork2.ActionSupport,内容如下:

      img

      图5 新建一个Action

    • Action需要在Struts2的核心配置文件中进行配置
      Struts2的核心配置文件为struts.xml,放在src目录下。

      img

      图6 struts.xml内容

      注意struts.xml的放置位置。

    • 新建一个result.jsp文件,用来action显示返回的视图

      img

      图7 result.jsp的内容

    • 最后运行HelloWorld项目,在浏览器访问http://localhost:8080/HelloWorld/helloworld
      最后展现的内容应该是result.jsp的内容。

      img

      控制台输出Action的打印内容

      img

      到这里,struts2就算配置完成了。

    涉及的代码

    • web.xml
      <?xml version="1.0" encoding="UTF-8"?>
      
    HelloWorld index.jsp
    <filter>
        <!-- Filter的名字 -->
        <filter-name>struts2</filter-name>
        <!-- Filter的实现类 struts2.5以前可能有所不同 -->
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <!-- 拦截所有的url -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    ``` - struts.xml ``` <?xml version="1.0" encoding="UTF-8"?> /result.jsp
            </package>
        </struts>
    
    -   HelloWorldAction.java
    

    package cn.xhcoding.action;

        public class HelloWorldAction extends com.opensymphony.xwork2.ActionSupport{
        
          @Override
          public String execute() throws Exception {
        	  System.out.println("正在执行的Action");
        	  // 返回视图 SUCCESS,这是框架定义
        	  return SUCCESS;
          }
        
        }
    
    -   result.jsp
    

    <%@ page language=“java” contentType=“text/html; charset=UTF-8”
    pageEncoding=“UTF-8”%>




    Action Result


    恭喜成功配置好基本的struts2环境


    Hello World, I am Successful



    
    [本文永久更新地址](http://www.xhcoding.cn/2017-06-08-struts2%E7%9A%84%E9%85%8D%E7%BD%AE%E5%92%8C%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E4%BE%8B%E5%AD%90/) 
    
    参考网址:
       struts2官方文档:http://struts.apache.org/docs/
       struts2.5版本改变:http://struts.apache.org/docs/version-notes-25.html
    
    展开全文
  • 粗糙集概念一些例子

    万次阅读 2015-10-14 22:24:55
    粗糙集概念一些例子粗糙集理论是一种研究不精确,不确定性知识数学工具。粗糙集思想为:一种类别对应一个概念(类别可以用集合表示,概念可以用规则描述),知识由概念组成;如果某个知识含有不精确概念,则...

    粗糙集的概念和一些例子

    粗糙集理论是一种研究不精确,不确定性知识的数学工具。
    
    粗糙集的思想为:一种类别对应一个概念(类别可以用集合表示,概念可以用规则描述),知识由概念组成;如果某个知识含有不精确概念,则该知识不精确。粗糙集对不精确概念的描述方法是通过下近似和上近似概念来描述。
    
    上近似包含了所有使用知识R可确切分类到X的元素。
    下近似包含了所有那些可能属于X的元素的最小集合。
    
    粗糙集可以解决的问题可以如下一些:
    1,不确定或者不精确知识的表达
    2,经验学习并从经验中获取知识
    3,不一致信息的分析
    4,根据不完整得到,不确定的知识进行推理
    5,在保留信息的前提下进行数据化简
    6,识别并评估数据之间依赖关系
    

    粗糙集的实例分析

    病人 头痛 胸口痛 体温 流感
    a1 正常
    a2
    a3 很高
    a4 正常
    a5
    a6 很高
    a7
    a8 很高

    • 在决策表中设置A={a1,a2,a3,a4,a5,a6,a7,a8},其中C={头痛,胸口痛,体温},D={流感}
    • 那么,就可以设置C1=头痛,C2=胸口痛,C3=体温,所以
      A/C1={{a1,a2,a3},{a4,a5,a6,a7,a8}} (头痛分类)
      A/C2={{a1,a2,a3,a4,a6,a8},{a5,a7}} (胸口痛分类)
      A/C3={{a1,a4},{a2,a5,a7},{a3,a6,a8}} (体温分类)

      A/{C1,C2}={{a1,a2,a3},{a4,a6,a8},{a5,a7}}
      A/{C1,C3}={{a1},{a2},{a3},{a4},{a5,a7},{a6,a8}}
      A/{C2,C3}={{a1,a4},{a2},{a5,a7},{a3,a6,a8}}

      A/C={{a1},{a2},{a3},{a4},{a5,a7},{a6,a8}}
      A/D={{a1,a4,a5,a8},{a2,a3,a6,a7}}

      Pos _c (D)={a1}U{a2}U{a3}U{a4}
      K=y_c(D)=Pos_c(D)/U=4/8=0.5
      Pos_(c-c1){D}={a1,a2,a4}!=Pos_c(D)
      Pos_(c-c2){D}={a1,a2,a4}=Pos_c(D)
      Pos_(c-c3){D}={a1,a2,a4}!=Pos_c(D)
      Pos_(c-{c1,c2}){D}={a1,a2,a4}!=Pos_c(D)
      Pos_(c-{c2,c3}){D}={a1,a2,a4}!=Pos_c(D)
      所以C2为冗余属性,即可删除的属性,所以C的D约简为C-{C2}={C1,C3}

    下期介绍聚类的概念

    展开全文
  • 5.3.1.1 ChainMap的例子和技巧

    千次阅读 2015-12-26 09:03:39
    下面来提供一些ChainMap类使用场合技巧:模拟python内部查获命名变量映射链:#python 3.4import builtinsimport collectionspylookup = collections.ChainMap(locals(), globals(), vars(builtins))...
  • 一个 Java 的 Socket 服务器客户端通信的例子

    万次阅读 多人点赞 2012-09-12 15:21:39
    一个 HelloWord 级别的 Java Socket 通信的例子。通讯过程:  先启动 Server 端,进入一个死循环以便一直监听某端口是否有连接请求。然后运行 Client 端,客户端发出连接请求,服务端监听到这次请求后向客户端发回...
  • 邻接矩阵定义和例子

    千次阅读 2018-04-07 21:41:52
    根据图定义可知,图逻辑结构分为两部分:VE集合。因此,用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间关系(边或弧)数据,称这个二维数组为邻接矩阵。邻接矩阵又分为有向图邻接矩阵无...
  • 一个简单的pcAndroid手机利用adb通信的例子。 自己初次写的时候一抹黑,所以弄了个简单的例子
  • python FileNotFoundError处理和例子

    万次阅读 2017-11-21 19:56:45
    FileNotFoundError处理代码:filename = 'tom.txt'#tom这个文件是不存在try: with open(filename) as file: content = file.read() except FileNotFoundError:#文件不能找到异常处理 print("Sorry!The file...
  • IdUDPServerIdUDPClient通讯的例子

    千次阅读 2011-08-02 16:11:09
    //--------------------------------------------------------------------------- //IdUDPServerIdUDPClient通讯的例子 #include #pragma hdrstop #inc
  • luac语言互相调用的例子

    万次阅读 2012-11-16 12:37:39
    没有真正懂LUAC语言如何之间交互。今天写了一个例子  首先我要实现功能计算两个整数的和,就是x+y了。因为xy是随时变化,我又不想在C程序里修改,那么就把这两个参数放到lua脚本来传递。 那么我是如何...
  • vpa全称是Variable-precision arithmetic,也就是算术精度。一般来说,vp是专门原来计算symbolic functions and variables,这是一些符号变量函数。例子是设置精度、求解方程。
  • 1、其中cudnn是一个常见神经网络层加速库文件,其能够很大程度把加载到显卡上网络层数据进行优化...2、下面是一些例子测试,从实际上可以看出cudnn可以在cuda基础上加速两倍以上: 使用cuda但是没有使用cudnn:
  • 问题(归并排序的例子)

    千次阅读 2018-04-08 11:44:20
    例子:[1,3,4,2,5]1左边比1小数, 没有;3左边比3小数, 1;4左边比4小数, 1、 3;2左边比2小数, 1;5左边比5小数, 1、 3、 4、 2;所以小为1+1+3+1+1+3+4+2=16如果直接用两层for循环扫一遍,时间...
  • 刚好我之前给美术做了个简单的例子,所以整理一下就共享给大家了。主要是做了两种动画,分别有例子,按空格可以改变动画。具体的制作过程不会非常详细(写的过程中,Generic被我写得有点详细了:),这里假设大家都是...
  • Java日历类(GregorianCalendarCalendar)简单例子

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 247,711
精华内容 99,084
关键字:

和的例子