通信的简单实现

拖了好久了,突然间觉得这迟到的总结不应该总结关于什么技术的事情了!技术博客是一个阶段的学习成果的总结,但是我觉得这篇博客首先应该总结一下自己的思想了!
在每个学期的开始每个人都会有一段时间的学习热情期,那段时间里脑子里幻想着好多东西,幻想着这样下去自己的收获该是多么的多,幻想着成为大神的种种!但是大神之路不是每个人想的那样简单,只有坚持不懈的坚持下去,才是唯一的真理!突然间发现自己又是如此的懒惰了,就是一篇很简单的技术博客也拖拉了这么久!是因为不会么?对,好像就是这个原因。但是不会为什么不去写技术博客呢?因为不会!每次我们都在给自己找一些可有苦无的借口,“不会”应该是一个特别经典的了!面对经典我们总是显得那么的脆弱,没有想着如何去突破这个叫经典的东西。最后的结果也就是不会了,到最终也是不会了!
突然觉得坚持是一种最可贵品质了!学会了去坚持,也就学会未来的了人生!
前些天学了关于通信的相关内容,实现了从自己在自己的电脑上相连接进行对话到与他人的电脑相连接,再到多个会话窗口的同时连接对话!
首先来了解一下qq聊天的的基本思想:
在指定的端口上创建一个服务器对象-让服务器进入待机状态,等待客户机的连接从连接成功的客户机上得到输入输出流读取客户机发来的数据,向客户机发数据;这样,一个简单的聊天功能就实现了
首先了解一下ServerSocket和Socket类的相关方法:
ServerSocket中常用的构造函数及方法:
构造函数:ServerSocket(int port) 这是一个构造方法,用于在当前的服务器默认的IP地址上监听一个指定的端口,即在指定的IP和端口创建一个ServerSocket对象
方法:
Socket accept() 产生阻塞,监听指定的端口,直至有客户端发来连接请求
void close() 关闭当前ServerSocket
InetAddress getInetAddress() 返回ServerSocket监听的,本机的IP地址
int getLocalPort() 返回ServerSocket监听的,本机的IP地址上指定的端口号
int getSoTimeout();void setSoTimeout(int timeout) 设置连接过程中没有得到相应的等待期限时间(TimeOut)
String toString() 以字符串的方式返回ServerSocket监听的,本机的IP地址及其端口号
Socket类中常用的构造函数和方法:
构造函数:Socket(InetAddress address,int port) 用于创建一个链接,向指定的IP地址上指定的端口的服务器端程序发送连接请求
Socket(String host,int port) 同上,但该方法允许通过主机名字符串向服务器发送连接请求
方法:
void close()关闭当前的Socket 连接
InetAddress getInetAddress() 返回Socket建立了连接的服务器的IP地址
InputStream getInputStream() 返回当前Socket的输入流
OutputStream getOutStream() 返回当前Socket的输出流
InetAddress getLocalAddress() 返回和Socket进行连接的本地的IP地址
int getLocalPort() 返回和Socket进行连接的本地的端口号
int getPort() 返回和Socket建立了连接的服务器的端口号
int getSoTimeOut();void setSoTimeOut(int timeout) 设置连接过程中没有得到相应的等待期限时间
String toString () 以字符串的方式返回Socket的属性信息
如果要实现多个会话窗口就应该是多线程的问题,只需要让服务器继承线程类,当在待机状态下每有一个客户机来连接的时候就产生一个线程去处理对应的客户机对象!
代码如下:
//public void setUpSever(int port) throws IOException{
// ServerSocket serve =new ServerSocket(port);
//System.out.println("服务器创建成功"+port);
//try {
// while(true){//服务器进入循环等待状态
// Socket client=serve.accept();
// ServeThread st=new ServeThread(client);
// st.start();
// System.out.println("线程已经启动");
// }
// {
// //创建服务器
// java.net.ServerSocket serve=new ServerSocket(port);
// System.out.println("服务器创建成功!"+port);
// Socket client=serve.accept();
// //de得到消息
// String s=client.getRemoteSocketAddress().toString();
// //从连接对象上得到输入输出流
// InputStream in=client.getInputStream();
// OutputStream ou=client.getOutputStream();
// String s1="欢迎聊天!";
// //将字符串转化为字节数组
// byte[] data=s1.getBytes();
// ou.write(data);
// String s2=new String (data);
// System.out.println("输入得字符串是:"+s2);
// ou.flush();//强制输出
//
// int du=0;
//
// while(du!=13)
// {
// du=in.read();
// System.out.println("当前读到的是:"+du);
// }
// System.out.println("你现在输入的是回车键,结束:"+du);
// String s4=ReadingString(in);
// System.out.println("缓存输出字符串:"+s4);
// client.close();
// }
// }catch(Exception ef){
// ef.printStackTrace();
// }

ServeThread 类代码:
package Tongxin;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServeThread extends Thread {
private OutputStream ou;
private Socket client;
public ServeThread(Socket s)
{
this.client=s;
}
public void run()
{
try {
processChat(this.client);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void Sendmassenge(String m) throws IOException{
byte[] data =m.getBytes();
ou.write(data);//用输出对象发送
ou.flush();//强制输出
}
private void processChat(Socket client) throws IOException
{
ou=client.getOutputStream();//得到输出流,输入流
InputStream in=client.getInputStream();
String s="欢迎来聊天@!";
this.Sendmassenge(s);
String inputs=readString(in);//读取客户机的信息
while(!inputs.equals("end")){
System.out.println("对方发来消息:"+inputs);
s="回复:我认识你的哦\r\n";
this.Sendmassenge(s);
inputs=readString(in);
}
s="再见!";
this.Sendmassenge(s);
client.close();
}
private String readString(InputStream in) throws IOException {
StringBuffer sbf=new StringBuffer();//创建一个缓冲区域
char c=0;
while(c!=13){//遇到换行符就是发送信息
int i=in.read();//读取客户机发来的每一个字节,返回整数值
c=(char)i;//将返回的数字在转化为对应的字节
sbf.append(c);//将得到的字节存到缓冲区域!
}
String inputs=sbf.toString().trim();
return inputs;
}
}

组后附上一个网址:http://hi.baidu.com/xiuyuanvip/item/fbe37c06e491b6ef359902e1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于LSTM的财务因子预测选股模型LSTM (Long Short-Term Memory) 是一种特殊的循环神经网络(RNN)架构,用于处理具有长期依赖关系的序列数据。传统的RNN在处理长序列时往往会遇到梯度消失或梯度爆炸的问题,导致无法有效地捕捉长期依赖。LSTM通过引入门控机制(Gating Mechanism)和记忆单元(Memory Cell)来克服这些问题。 以下是LSTM的基本结构和主要组件: 记忆单元(Memory Cell):记忆单元是LSTM的核心,用于存储长期信息。它像一个传送带一样,在整个链上运行,只有一些小的线性交互。信息很容易地在其上保持不变。 输入门(Input Gate):输入门决定了哪些新的信息会被加入到记忆单元中。它由当前时刻的输入和上一时刻的隐藏状态共同决定。 遗忘门(Forget Gate):遗忘门决定了哪些信息会从记忆单元中被丢弃或遗忘。它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 输出门(Output Gate):输出门决定了哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。同样地,它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 LSTM的计算过程可以大致描述为: 通过遗忘门决定从记忆单元中丢弃哪些信息。 通过输入门决定哪些新的信息会被加入到记忆单元中。 更新记忆单元的状态。 通过输出门决定哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。 由于LSTM能够有效地处理长期依赖关系,它在许多序列建模任务中都取得了很好的效果,如语音识别、文本生成、机器翻译、时序预测等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值