精华内容
下载资源
问答
  • 前面几章的例子中服务端收到信息后都没有返回应答信息,在实际中也许会有用到,写个例子记住 [b]服务端代码[/b] [code="java"] package com.mytest.socket; import java.io....import ...
    前面几章的例子中服务端收到信息后都没有返回应答信息,在实际中也许会有用到,写个例子记住

    [b]服务端代码[/b]


    package com.mytest.socket;

    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;

    public class SocketSevice {

    //侦听端口
    private int port;

    private ServerSocket serverSocket;

    //最大连接
    private static int maxCount=3;

    //连接数量累计
    private int index=0;

    private static SocketSevice socketSevice=new SocketSevice();

    //任务线程池
    private ExecutorService threadPool=Executors.newFixedThreadPool(maxCount);

    private SocketSevice(){}

    public static SocketSevice getInstance()
    {

    return socketSevice;
    }

    public void listening(int port) throws IOException
    {
    this.port=port;
    serverSocket=new ServerSocket(port);

    //使用accept()阻塞等待客户请求,有客户请求到来则产生一个Socket对象,并继续执行
    while(true){
    Socket socket=serverSocket.accept();
    SocketTask task=new SocketTask(socket,"任务"+index);
    threadPool.execute(task);
    index++;


    }


    }

    public void shutdown() throws IOException
    {
    if(threadPool.isTerminated()){
    threadPool.shutdown();
    serverSocket.close();
    }
    }

    public static void main(String[] args)
    {
    SocketSevice s=SocketSevice.getInstance();

    try {
    s.listening(1099);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }


    }


    public int getPort() {
    return port;
    }

    public void setPort(int port) {
    this.port = port;
    }



    }






    package com.mytest.socket;

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.net.Socket;

    public class SocketTask implements Runnable{

    private Socket socket;
    private String name;

    public SocketTask(Socket socket,String name)
    {
    this.socket=socket;
    this.name=name;
    System.out.println("["+name+"]"+"开始.....");
    }

    @Override
    public void run() {

    BufferedReader br =null;
    BufferedWriter bw=null;
    try {

    br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
    String msg= br.readLine();
    bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
    System.out.println("["+name+"]"+"接收数据>>"+msg);
    String str = "当前处理["+msg+"]";
    bw.write(str);
    bw.flush();
    System.out.println("推送["+name+"]应答信息\n");
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }finally
    {
    try {
    if(br!=null)
    {
    br.close();
    }
    if(bw!=null)
    {
    bw.close();
    }
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }




    }

    }



    [b]客户端的具体代码[/b]



    package com.mytest.socket;

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;

    public class SocketClient {

    private int remotePort;
    private String remoteIp;
    private Socket socket;

    public SocketClient(String remoteIp,int remotePort) throws IOException
    {
    this.remoteIp=remoteIp;
    this.remotePort=remotePort;
    socket=new Socket(remoteIp,remotePort);
    System.out.println("连接 : "+remoteIp+" : "+remotePort);

    }



    public void close() throws IOException
    {
    socket.close();
    System.out.println(" ----关闭连接 ----\n");
    }

    public void writeString(String str) throws IOException
    {
    //构建IO流
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

    bw.write(str);

    //当接收的类使用的是BufferedReader,发送的类是BufferedWriter的时候,要注意发送的一行要有换行标识符才能正确写入

    bw.newLine();
    //刷新缓冲区才能真正写入
    bw.flush();
    System.out.println("传送数据: "+str);

    //读取服务器返回的消息数据

    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    String callbrk=br.readLine();
    System.out.println(socket.getInetAddress().getLocalHost()+":"+socket.getPort()+">>"+callbrk);




    }



    /**
    * @param args
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub

    try {
    for(int i=0;i<5;i++){
    SocketClient client=new SocketClient("127.0.0.1",1099);
    client.writeString("哈哈哈"+i);

    client.close();

    }

    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }


    }

    }



    先运行服务端(SocketSevice),再运行客户端(SocketClient) 效果如下


    [img]http://dl2.iteye.com/upload/attachment/0117/0140/5bef0029-777c-3b1b-b1d3-63293340551b.png[/img]


    [img]http://dl2.iteye.com/upload/attachment/0117/0142/f08b96b4-186e-3f15-b84a-2def76d73bda.png[/img]
    展开全文
  • 简单一句话概括:"使用输入重定向能把文件导入到命令中,而输出重定向则是能够把原本要输出到屏幕的数据信息写入到指定文件中" 重定向 详解 :<... Linux启动后,会默认打开3个文件描述符(通过分配的一个数字,...

    简单一句话概括:"使用输入重定向能把文件导入到命令中,而输出重定向则是能够把原本要输出到屏幕的数据信息写入到指定文件中"

    重定向 详解 :<https://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html>

    Linux启动后,会默认打开3个文件描述符(通过分配的一个数字,实现对文件的读写操作),分别是:标准输入standard input 0,正确输出standard output 1,错误输出:error output 2

    Linux命令执行过程的数据传输情况:

    standard intput:默认从键盘输入,为0时表示从其他文件或命令的输入

    standard output:默认输出到屏幕,为1时表示输出到文件

    standard error output:默认输出到屏幕,为2时表示输出到文件

    标准输入(stdin):代码为0,使用<或<<

    标准输出(stdout):代码为1,使用>或>>

    标准错误输出(stderr):代码为2,使用2>或2>>

    系统默认存在/etc/crontab文件,却无/etc/crontab/vbird这个文件,执行"cat /etc/crontab /etc/crontab/vbird"这个命令,cart会进行:

    ①标准输出:读取/etc/crontab后,将该文件内容显示到屏幕上

    ②标准错误输出:因为无法找到/etc/crontab/vbird,因此在屏幕上显示错误信息

    通过数据流重定向分别将

    标准输出("正确"的输出数据)输出/存放到ist1_right文件中(通过>),

    标准错误输出("错误的"输出信息)输出/存放到list2_error文件中(通过2>)

       

    对于输出重定向符有这些情况:

    符号

    作用

    命令 > 文件

    将标准输出重定向到一个文件中(清空原有文件的数据)

    命令 2> 文件

    将错误输出重定向到一个文件中(清空原有文件的数据)

    命令 >> 文件

    将标准输出重定向到一个文件中(追加到原有内容的后面)

    命令 2>> 文件

    将错误输出重定向到一个文件中(追加到原有内容的后面)

    命令 >> 文件 2>&1 命令 &>> 文件

    将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)

    2>&1的含义:

    <http://blog.csdn.net/ggxiaobai/article/details/53507530>

    <https://www.cnblogs.com/zhenghongxin/p/7029173.html>

       

    错误输出重定向:命令 2> 文件(若该文件不存在,系统会自动创建)

     

    标准输出重定向:命令 > 文件

     

    linuxprobe这个文件是真实存在的,即使用标准输出即可将数据写入到文件中,而错误输出的重定向则不行,依然会把信息输出到了屏幕上

       

    将标准输出与错误输出共同写入到文件中(原文件信息保留,追加到后面)

    &>可实现清空后再写入)

       

    将错误信息直接忽略(不显示、不存储):黑洞设备/dev/null可以"吃掉"任何导向这个设备的信息

     

    追加写入:命令 >> 文件

       

    对于输入重定向有这些情况:

    符号

    作用

    命令 < 文件

    将文件作为命令的标准输入

    命令 << 分界符

    从标准输入中读入,直到遇见"分界符"才停止(内联输入重定向)

    命令 < 文件1 > 文件2

    将文件1作为命令的标准输入并将标准输出到文件2

      

      

    命令 < 文件:将/etc/passwd文件作为wc命令的标准输入,相当于命令"cat /etc/passwd | wc -l"统计行数(统计用户个数)

       

    用stdin替代键盘的输入以创建新文件(将.bashrc文件作为cat命令的标准输入并输出到创建的catfile文件中(类似cp命令复制的一般)):命令 < 文件1 > 文件2

       

    命令 << 分界符:用cat命令直接将输入的信息输出到catfile中,且当由键盘输入"eof"分界符(ctrl+d)时输入才停止

       

    双向重定向:tee(T,T型水管接口)命令

    tee会同时将数据流送往文件与屏幕。

    而输出到屏幕的,是stdout,且可以让下个命令继续处理

    选项:

    -a:以累加(append)的方式,将数据加入文件中(tee命令默认清空覆盖)

       

    参考资料:

    一个优秀的linux博客: <http://www.cnblogs.com/chengmo/>

    转载于:https://www.cnblogs.com/dayoyan/p/8651762.html

    展开全文
  • 输入输出加起来就是既可以输入也可以输出,而且可以查询中断双模式 PC口都被占用 方式一剩下两个还可以输入和输出 PC口既可以在方式0的时候独立使用 ,还可以选通方式剩下读管脚输入输出 ...
    
    
    • 8255A只有A口工作在方式2
      在这里插入图片描述
    • 输入两根握手线
      在这里插入图片描述
    • 输出两根握手线
      在这里插入图片描述
    • 中断允许有两个
      在这里插入图片描述
    • 把输入输出加起来就是既可以输入也可以输出,而且可以查询中断双模式
    • PC口都被占用
      在这里插入图片描述
    • 方式一剩下两个还可以输入和输出
      在这里插入图片描述
    • PC口既可以在方式0的时候独立使用 ,还可以选通方式剩下读管脚输入输出
      在这里插入图片描述
    展开全文
  • #Tensorflow中实现双向RNNs 在tensorflow中已经提供了双向RNNs的接口,使用**tf.contrib.rnn.bidirectional_dynamic_rnn()**这个函数,就可以很方便的构建双向RNN网络。 ...inputs, # 输入 s...

    循环神经网路(RNN)在工作时一个重要的优点在于,其能够在输入和输出序列之间的映射过程中利用上下文相关信息。然而不幸的是,标准的循环神经网络(RNN)能够存取的上下文信息范围很有限。这个问题就使得隐含层的输入对于网络输出的影响随着网络环路的不断递归而衰退。因此,为了解决这个问题,**长短时记忆(LSTM)**结构诞生了。与其说长短时记忆是一种循环神经网络,倒不如说是一个加强版的组件被放在了循环神经网络中。具体地说,就是把循环神经网络中隐含层的小圆圈换成长短时记忆的模块
    LSTM处理序列问题有效的关键在于门结构,通过门结构去除或者增加信息到细胞状态的能力。
    **

    1.Bi-directional Long Short-Term Memory(双向LSTM)结构

    **
    简单来说双向LSTM就是把BRNN中隐含层的小圆圈换成了长短时记忆的模块。与其说长短时记忆是一种循环神经网络,倒不如说是一个加强版的组件被放在了循环神经网络中。这个模块的样子如下图所示:
    LSTM模型
    参数介绍:
    参数
    计算公式:
    **

    • 遗忘门
      遗忘门能决定应丢弃或保留哪些信息。来自先前隐藏状态的信息和当前输入的信息同时输入到Sigmoid函数,输出值处于0和1之间,越接近0意味着越应该忘记,越接近1意味着越应该保留。这个f就可以用来操控遗忘哪些数据。
      遗忘门
    • 输入门
      f是forget的意思,i是input的意思。
      输入门用来更新单元状态。先将先前隐藏状态的信息和当前输入的信息输入到Sigmoid函数,在0和1之间调整输出值来决定更新哪些信息,0表示不重要,1表示重要。也可将隐藏状态和当前输入传输给Tanh函数,并在-1和1之间压缩数值以调节网络,然后把Tanh输出和Sigmoid输出相乘,Sigmoid输出将决定在Tanh输出中哪些信息是重要的且需要进行保留。
      输入门
      **
    • 更新细胞状态:下图展示了两个门是如何控制遗忘和输出的。
      更新细胞状态
      **
    • 输出门
      我们确定了当前的状态,那么当前状态的多少可以进行输出呢?控制Ct输出的门叫输出门,用Ot表示。
      输出门能决定下个隐藏状态的值,隐藏状态中包含了先前输入的相关信息。当然,隐藏状态也可用于预测。首先把先前的隐藏状态和当前输入传递给Sigmoid函数;接着把新得到的单元状态传递给Tanh函数;然后把Tanh输出和Sigmoid输出相乘,以确定隐藏状态应携带的信息;最后把隐藏状态作为当前单元输出,把新的单元状态和新的隐藏状态传输给下个时间步。输出门

    LSTM的变种GRU
    GRU
    **

    **
    **

    知乎中讨论LSTM为何如此有效

    **

    2.双向LSTM

    **
    RNN和LSTM都只能依据之前时刻的时序信息来预测下一时刻的输出,但在有些问题中,当前时刻的输出不仅和之前的状态有关,还可能和未来的状态有关系。比如预测一句话中缺失的单词不仅需要根据前文来判断,还需要考虑它后面的内容,真正做到基于上下文判断。即:
    对于每个时刻t,输入会同时提供给两个方向相反的RNN,输出由这两个单向RNN共同决定。
    双向RNN

    #Tensorflow中实现双向RNNs

    在tensorflow中已经提供了双向RNNs的接口,使用**tf.contrib.rnn.bidirectional_dynamic_rnn()**这个函数,就可以很方便的构建双向RNN网络。

    def bidirectional_dynamic_rnn(
    cell_fw, # 前向RNN
    cell_bw, # 后向RNN
    inputs, # 输入  
    sequence_length=None,# 输入序列的实际长度(可选,默认为输入序列的最大长度)
    initial_state_fw=None,  # 前向的初始化状态(可选)
    initial_state_bw=None,  # 后向的初始化状态(可选)
    dtype=None, # 初始化和输出的数据类型(可选)
    parallel_iterations=None,
    swap_memory=False, 
    time_major=False,
    # 决定了输入输出tensor的格式:如果为true, 向量的形状必须为 `[max_time, batch_size, depth]`. 
    # 如果为false, tensor的形状必须为`[batch_size, max_time, depth]`. 
    scope=None
    )
    

    当输入的inputs张量的维度为:[batch_size,max_len,embeddings_num],此时time_major = False(一般设为这个);当输入的inputs张量的维度为:[max_len,batch_size,embeddings_num],此时time_major = True
    返回值:
    元组: (outputs, output_states)

    • outputs为(output_fw, output_bw),是一个包含前向cell输出tensor和后向cell输出tensor组成的元组。假设
      time_major=false, output_fw和output_bw的shape为**[batch_size, max_len,
      hiddens_num]。在此情况下,最终的outputs可以用tf.concat([output_fw,
      output_bw],-1)tf.cocat([output_fw, output_bw],2)**

    • output_states为(output_state_fw, output_state_bw),包含了前向和后向最后的隐藏状态的组成的元组。 output_state_fw和output_state_bw的类型为LSTMStateTuple。 LSTMStateTuple由**(c,h)**组成,分别代表memory cell和hidden state。

    最近在做文本分类,使用到了双向LSTM(BiLSTM),其具体实现为:

    #前向LSTM
    fw_cell = tf.nn.rnn_cell.LSTMCell(self.cell_hidden_size, name="fw_lstm")
    #后向LSTM
    bw_cell = tf.nn.rnn_cell.LSTMCell(self.cell_hidden_size, name ="bw_lstm")
    #构建双向LSTM网络
    outputs, _ = tf.nn.bidirectional_dynamic_rnn(fw_cell,bw_cell,embedding_inputs_dense,sen_len,dtype=tf.float32)
    #outputs包含一个前向的cell和后向的cell组成的元组
    lstm_contact = tf.concat(outputs, 2) 
    lstm_contact = tf.reduce_mean(lstm_contact, axis=1)
    
    展开全文
  • 目录 概述 输入IO 输出IO 推挽输出(Push-Pull Output) ... 推挽输出作为双向IO 51单片机的P0端口 51单片机的P1~P3端口 附录 参考文档 概述 能将处理器的GPIO(General Purpose Input and Output)内...
  • 不存在同时刻同时输入输出外部信号,双电源0和VCC叠加的时刻。上拉电阻实现准双向,51通过写1断开下拉三极管或者mos管,再读入。32也是通过输出输入配置转换输出输入在同一引脚 上拉电阻读入高电平时类似双电源...
  • 1. 准双向口结构准双向口,也就是说不是真正的双向口,真正意义上的双向口是需要通过设置专门的“输入输出方向寄存器”将IO口设为输入模式或者输出模式,才能实现对应的输入输出功能。而准双向口则不需要设置,作为...
  • GPIO输入输出各种模式(推挽、开漏、准双向端口)详解 原创techexchangeischeap发布于2017-05-20 10:31:31阅读数 62961收藏 展开 技术交流是便宜的博客地址:http://blog.csdn.net/techexchangeischeap ...
  • 集电极开路输出的结构如图1所示,右边的那个三极管集电极什么都不接,所以叫做集电极开路(左边的三极管为反相之用,使输入为“0”时,输出也为“0”)。对于图1,当左端的输入为“0”时,前面的三极...
  • I2C接口 原创朝辞暮见发布于2018-06-13 19:45:25阅读数 8265收藏 展开 一、I2C总线协议内容 1. I2C总线引脚定义 SDA (I2C数据引脚) ...I2C总线物理连接如下图所示,...连到总线上的任一器件输出的低电平,都将使...
  • 输入属性 @Input(),简单理解为从父组件传递数据到子组件。 输出属性@Output(),简单理解为从子组件传递数据到父组件。 这样就构成了双向的数据绑定。 下面看代码示例: app-stars是子组件,newRating是父组件的...
  • // 设置这个双向io的方向为全部io输出  IOWR_ALTERA_AVALON_PIO_DATA (PIO_BID_DB_BASE, value); } unsigned char pio_bid_db_read8bits() {  IOWR (PIO_BID_DB_BASE,1,0X00);  return IORD_ALTERA_AVALON...
  • GPIO输入输出各种模式(推挽、开漏、准双向端口 概述 能将处理器的GPIO(General Purpose Input and Output)内部结构和各种模式彻底弄清楚的人并不多,最近在百度上搜索了大量关于这部分的...
  • 概括地说,IO的功能模式大致可以分为输入、输出以及输入输出双向三大类。其中作为基本输入IO,相对比较简单,主要涉及的知识点就是高阻态;作为输出IO,相比于输入复杂一些,工作模式主要有开漏(Open Drain)模式和...
  • 类的内存分配 加载到方法区 对象在堆内存 局部变量在栈内存 ...判断真实类型,在方法区加载的类 ...package day1501_手写双向链表; // 链表类 public class SXLianBiao<T> { privat...
  • C++输入输出迭代器

    2018-02-06 14:36:22
    C++输入输出可以使用cin,cout,也可以使用C语言的scanf和printf。这里介绍使用输入输出迭代器进行输入输出。 迭代器 迭代器代表广义指针,可以完成常规指针的所有操作。C++的STL定义了5中迭代器:(1)输入迭代器...
  • 概述能将处理器的GPIO(General Purpose Input and Output)内部结构和各种模式彻底弄清楚的人并不多,最近在百度上搜索了大量关于这部分的资料...概括地说,IO的功能模式大致可以分为输入、输出以及输入输出双向三大...
  • C++的三种输入输出

    2020-12-18 22:09:50
    我们所熟悉的输入输出操作分别是istream(输入流)和ostream(输出流)这两个类提供的,为了允许双向的输入/输出,有istream和ostream派生出了iostream类。cin是 istream的实例,cout是ostream的实例。 二、基于文件...
  • 输入输出接口的通用设计 需求??: 读取数据 向设备发送设计 设备有无被占用 设备是否已经连接 设备是否已经启动 接口通用线: 数据线 是io设备与主机之间进行数据交换的传输线 单向传输数据线 双向传输数据线 ...
  • 对于输入输出IO,容易产生疑惑的地方是准双向双向端口的区别。 下面就按照这样的顺序依次介绍各个模式的详细情况。 输入IO 这里所说的输入IO,指的是只作为输入,不具有输出功能。此时对于input引脚的要求...
  • 概括来说,IO的功能模式大致可以分为输入、输出以及输入输出双向三大类。其中作为基本输入IO,相对比较简单,主要涉及的知识点就是高阻态;作为输出IO,相比与输入复杂一些,工作模式主要有开漏(Open Drain)模式和...
  • 常见的输入输出设备 输入设备: 键盘 鼠标 输入板和压感笔 输入设备: 显示器 打印机 设计输入输出接口面临的问题 如何读取设备里面的数据 如何向设备发送数据 设备有没有被占用 设备是否已经连接 设备是否已经...
  • 1. 准双向口结构准双向口,也就是说不是真正的双向口,真正意义上的双向口是需要通过设置专门的“输入输出方向寄存器”将IO口设为输入模式或者输出模式,才能实现对应的输入输出功能。而准双向口则不需要设置,作为...
  • 以2009—2012年企业跨地区的专利许可数据表征技术网络,构建以技术输出输入为方向的双向网络。结合社会网络分析方法,通过网络可视化图谱、网络整体特征、网络中心性、结构洞、核心-边缘、聚类系数、凝聚子群、QAP...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,284
精华内容 1,313
关键字:

双向输入输出