cs是一种重要的网络计算机模式_cs在计算机代表啥

cs是一种重要的网络计算机模式_cs在计算机代表啥开始之前,先大概说一下吧。计算机网络研究的是理论,讲究的是网络过程中的连接方式,还有协议制定的原因,为什么这么指定,它不是一个简单的敲代码,做码农就好了的,关键是在于创新,先是理解协议为什么这么制定,要怎么样才可以更加好的指定出下一个协议,怎么才可以做出一个好的东西。什么是cscs即:client/server,是服务器客户端结构。是一种“一对多”的模式,一台服务器,处理多个客户端发来的请求,……

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

开始之前,先大概说一下吧。计算机网络研究的是理论,讲究的是网络过程中的连接方式,还有协议制定的原因,为什么这么指定,它不是一个简单的敲代码,做码农就好了的,关键是在于创新,先是理解协议为什么这么制定,要怎么样才可以更加好的指定出下一个协议,怎么才可以做出一个好的东西。

什么是cs

cs即:client/server,是服务器客户端结构。是一种“一对多”的模式,一台服务器,处理多个客户端发来的请求,完成了业务逻辑之后,再返回给客户端一些信息。其中,服务器不会主动发起请求,都是被动处理的,像一头牛,拉一下绳子走几步;而客户端则主要是提供一个界面,给你点击一些功能按钮,其实每一个按钮就是一个请求,发送到服务器中给你实现这个请求,再把结果返回给你。就像你有一道数学题目不会,打开客户端(一个app,或者exe)然后输入你的问题,点击解答按钮,就有一个请求通过网络到了服务器,服务器做出了这道题,把答案返回给你,你的客户端界面再显示出这道题的答案,这就是所谓的cs模式的工作流程了。(小猿搜题之类的就是这么个流程了)

socket

socket是一种实现网络连接的方式,通过两台电脑一边一个socket嵌套字,在两台电脑(一台服务器,一台主机)之间建立通道,然后他们就可以传输数据了。这其实是一种思想的具体化,网络通信理论提出了要连接两个电脑,就需要这么个东西去实现功能,人们把它设计出来,就命名为嵌套字。
所以,代码什么的,只是一种实现,谁都可以,记住,一个好的计算机科学家,不是只能实现,而是要有想法,实现什么的,只要你的理论没有漏洞,是不会出现bug的。出现了,也是语言底层设计本身有问题,不是你的错。
那么,下面说一下简单的socket应用吧:
第一个是实现回声的cs代码:所谓回声,就是客户端发什么信息xxxx,服务器就回复一个:我是服务器,我收到了你的信息:xxxx。
代码如下,java实现;

import java.io.*;
import java.net.*;
import java.text.SimpleDateFormat;
import java.util.Date;

public class server { 
   
 //设置端口号/
 public static int portNo=3333;
 public static void main(String[] args) throws IOException { 
   
  //初始化serverSocket类
  ServerSocket s=new ServerSocket(portNo);
  System.out.println("The Server is starting...");
  //建立socket连接(阻塞,直到有客户端连接)
  Socket socket=s.accept();
  //接收数据
  try{ 
   
   //构造输入流缓存
   BufferedReader bufReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
   PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
   String time=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new Date());
   while(true){ 
   
       //按行读取输入内容
    String strLine=bufReader.readLine();
    //如果收到byebye则退出循环
    if(strLine.equals("byebye")){ 
   
     break;
    }
    System.out.println("In the Server reveived the info: "+strLine);
    //向客户端发送接收到的数据
    System.out.println("The server is send the received msg to the client...");
    out.println("The received msg is: "+strLine+" and The time is:"+time);
    
   }
  }catch(Exception e){ 
   
   e.printStackTrace();
  }finally{ 
   
   System.out.println("close the Server socket and the io");
   //关闭socket,断开连接
   socket.close();
   s.close();
  }

 }

}

客户端

import java.io.*;
import java.net.*;

public class client { 
   

 /** * @param args */
 public static String clientName="laughcry";
 //设置端口号
 public static int portNo=3333;
 public static void main(String[] args) throws IOException { 
   
  // TODO Auto-generated method stub
  //设置连接地址类,连接本地,描述使用本socket的ip地址
  InetAddress addr=InetAddress.getByName("localhost");
  //初始化socket类
  Socket socket=new Socket(addr,portNo);
  try{ 
   
   System.out.println("socket="+socket);
   //设置io句柄
   BufferedReader bufReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
   PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
   //向服务器端发送数据
   out.println("Hello server ,I am "+clientName);
   //接受服务器返回的信息
   String str=bufReader.readLine();
   System.out.println("The msg from server is: "+str);
   out.println("byebye");
  }catch(Exception e){ 
   
   e.printStackTrace();
  }finally{ 
   
   //关闭连接
   System.out.println("close the client socket and the io.");
   socket.close();
  }

 }

}

这个例子只是在一台电脑上开两个程序,然后client访问server而已。是用来理解一下socket的,之后的这个才是通常的cs架构应有的一对多功能,基于第一个代码加一个多线程处理就好了。

先是客户端

import java.io.*;
import java.net.*;
import java.net.Socket;
import java.util.Scanner;

public class client{ 
   
    public static int portNo=14444;
    public static String myname="2号";

    public static void main(String[] args) throws IOException { 
   
        InetAddress addr = InetAddress.getByName("localhost");
        Socket s=new Socket("10.21.22.116",portNo);//第一个参数是你的服务器的ip号,在cmd终端输入ipconfig,找到ipv4对应的就好了。
        System.out.println(s.getInputStream());
        System.out.println(s.getOutputStream());

        System.out.println("socket=" + s);
        try { 
   
            BufferedReader bufRead=new BufferedReader(new InputStreamReader(s.getInputStream()));
            PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(s.getOutputStream())),true);
            out.println("Hello server ,I am " + myname);
            while (true) { 
   
                String line= bufRead.readLine();
                System.out.println("接收到服务器回复:"+line);
                System.out.println("开始输入");
                Scanner scanner=new Scanner(System.in);
                out.println(scanner.nextLine());
            }
        } catch (IOException e) { 
   
            e.printStackTrace();
        }finally { 
   
            s.close();
        }

    }
}

然后是服务器了,下面是开了多线程的服务器,原理如下图:
在这里插入图片描述
关键是红色字体部分,要启动多线程就好了,先要新建一个线程类。

import java.io.*;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;

public class aThread extends Thread { 
   
    private Socket socket;
    public aThread(String s){ 
   
        super(s);
    }

    public aThread(Socket s){ 
   
        socket=s;
    }

    public void run(){ 
   
        try { 
   
            //BufferedReader bufReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            BufferedReader bufReader1=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
            PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
            //String time = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new Date());
            String time = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(new Date());
            while (true) { 
   
                String Line=bufReader1.readLine();
                if (Line.equals("over")) { 
   
                    break;
                }
                System.out.println("接收到了客戶端信息:" + Line);
//向客户端发送接收到的数据
                out.println("客戶,我在" + time+ "已經收到了你的信息: " + Line );
            }
        } catch (Exception e) { 
   
            e.printStackTrace();
        } finally { 
   
            System.out.println("關閉連接");
            try { 
   
                socket.close();
            } catch (IOException e) { 
   
                e.printStackTrace();
            }
        }
    }
}

然后是服务器的启动类。

import java.io.*;
import java.net.*;
import java.text.SimpleDateFormat;
import java.util.Date;

public class server { 
   
    //public static int portNo = 3333;
    public static int portNob=14444;
    public static void main(String[] args) throws IOException { 
   
// TODO Auto-generated method stub
//初始化serverSocket类
        //ServerSocket s = new ServerSocket(portNo);
        ServerSocket s=new ServerSocket(portNob);
        System.out.println("啓動服務器");
//建立socket连接(阻塞,直到有客户端连接)
        //Socket socket = s.accept();
        int i=1;
        while (true){ 
   
            System.out.println("等待连接"+i++);
            Socket socket=s.accept();
            
            new aThread(socket).start();
        }
    }
}

好了,到这里,cs的基础模式和代码就写完了。那么,对于代码实现入门,你应该明白了吧?其实,通常情况下,客户端自己也有很强的业务逻辑处理能力,一些不用发请求就可以解决的问题,本地就搞定了,只有一些要同步到网络的操作,才会特意联网传送的,比如:账号验证,下载数据,或者一些要同步数据库的操作。
那么,说完了cs模式之后,我们要讲接下来的另一种网络通信模型:p2p。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193291.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • LoadRunner教程(1)-LoadRunner简介与安装

    LoadRunner教程(1)-LoadRunner简介与安装LoadRunner,是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。企业使用LoadRunner能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。LoadRunner可适用于各种体系架构的自动负载测试,能预测系统行为并评估系统性能。下载及其安装过程参照如下,记住安装成英文…

    2022年5月23日
    37
  • python中astype 存在空值_python-DataFrame.astype()错误参数

    python中astype 存在空值_python-DataFrame.astype()错误参数使用列的字典时,astype引发ValueError.我试图将大DF中的稀疏列的类型转换(从float到int).我的问题是NaN值.即使将errors参数设置为’ignore’,使用列的字典时也不会忽略它们.这是一个玩具示例:t=pd.DataFrame([[1.01,2],[3.01,10],[np.NaN,20]])t.astype({0:int},errors=’ignore’)V…

    2022年5月25日
    75
  • RedisClient下载地址[通俗易懂]

    RedisClient下载地址[通俗易懂]下载地址:https://github.com/caoxinyu/RedisClient/tree/windows/release

    2022年10月12日
    0
  • 敏捷项目管理的流程_敏捷开发项目管理方法

    敏捷项目管理的流程_敏捷开发项目管理方法引言:敏捷绝非某一种特定的开发方法,它只是一种应对快速变化的需求的一种软件开发能力。敏捷本身只包含了《敏捷软件开发宣言》和《敏捷软件的十二条原则》两份文档。敏捷的起源:敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。目前很多互联网公司都在搞或者想

    2022年10月30日
    0
  • 网站管理后台帐号密码暴力激活成功教程方法

    网站管理后台帐号密码暴力激活成功教程方法【导读】对于网站运行的个人站长而言,最担心的是应如何有效且安全的去管理自己的网站,否则自己辛辛苦苦经营的网站就会被不请自来的不速之客给攻破,轻则站点数据被窃取,重则整个网站都被攻陷,导致无法恢复。本文主要从管理后台这个方面来讲解其黑客攻击过程,并通过在虚拟环境中展开实例演示,各读者可以跟着本教程去做实验,通过实验加强对攻击过程的了解,如果你是一名菜鸟站长也可以针对性的去做一下防护方案。…

    2022年10月13日
    0
  • 阿里云图片存储_阿里云oss价格

    阿里云图片存储_阿里云oss价格oss目的:1.图片和音视频等应用的海量存储2.网页或者移动应用的静态和动态资源分离利用BGP带宽,OSS可以实现超低延时的数据直接下载。也可以配合阿里云CDN加速服务3.云端数据处理比如图片的裁剪,缩放,鉴黄等oss使用:1.http://www.aliyun.com/product/登录阿里云,开通oss图片存储(如果你还没有账号需要先注册获取AccessKey…

    2022年10月28日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号