Ycc365下载-亚洲365bet投注-帕尼尼球星卡FIFA365

cs是一种重要的网络计算机模式

大家好,又见面了,我是你们的朋友全栈君 开始之前,先大概说一下吧。计算机网络研究的是理论,讲究的是网络过程中的连接方式,还有协议

cs是一种重要的网络计算机模式

大家好,又见面了,我是你们的朋友全栈君

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

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

socketsocket是一种实现网络连接的方式,通过两台电脑一边一个socket嵌套字,在两台电脑(一台服务器,一台主机)之间建立通道,然后他们就可以传输数据了。这其实是一种思想的具体化,网络通信理论提出了要连接两个电脑,就需要这么个东西去实现功能,人们把它设计出来,就命名为嵌套字。

所以,代码什么的,只是一种实现,谁都可以,记住,一个好的计算机科学家,不是只能实现,而是要有想法,实现什么的,只要你的理论没有漏洞,是不会出现bug的。出现了,也是语言底层设计本身有问题,不是你的错。

那么,下面说一下简单的socket应用吧:

第一个是实现回声的cs代码:所谓回声,就是客户端发什么信息xxxx,服务器就回复一个:我是服务器,我收到了你的信息:xxxx。

代码如下,java实现;

代码语言:javascript代码运行次数:0运行复制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();

}

}

}客户端

代码语言:javascript代码运行次数:0运行复制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架构应有的一对多功能,基于第一个代码加一个多线程处理就好了。

先是客户端

代码语言:javascript代码运行次数:0运行复制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();

}

}

}然后是服务器了,下面是开了多线程的服务器,原理如下图:

关键是红色字体部分,要启动多线程就好了,先要新建一个线程类。

代码语言:javascript代码运行次数:0运行复制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();

}

}

}

}然后是服务器的启动类。

代码语言:javascript代码运行次数:0运行复制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.cn/193291.html原文链接:https://javaforall.cn

← 上一篇: 让 Android 手机更省电流畅,你可以试试「刷内核」
下一篇: [这么过分,一定要发Colg]大家玩红眼这个职业的初衷是什么呢? →

相关推荐

QQ鼻祖ICQ现状,还有千万用户
美图秀秀电脑版支持的键盘快捷键说明
“组合拳”来了?一批贷超,这次可能要吃不上饭了!
最受欢迎的足球滚球软件推荐:安全性、体验与功能全面分析
乐视65英寸电视报价
索尼公司有哪些游戏?索尼经典游戏十大排名榜
蓝马饲料合成配方详解,河豚+小麦+玉米各需多少?
我的淘宝流量来自哪里?如何提升流量呢?亲测有效!30天让自然流量翻倍的5个神操作!
油画拍摄用什么拍的
远方名字寓意,远方名字的含义,远方名字的意思解释
网易163免费邮
圯桥是什么意思