博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络应用软件结构-----CS与BS结构(网络基本知识小结)
阅读量:7280 次
发布时间:2019-06-30

本文共 6052 字,大约阅读时间需要 20 分钟。

1、网络的大致结构

  

 

2、网络编程

  通过直接或间接地使用网络通讯的协议实现计算机与计算机之间的通讯。在TCP/IP协议层主要麦网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台机。

3、通过TCP/IP制作的网络应用软件的结构

(1)CS结构(Client---Service)

Client客户端------(TCP/IP协议)-------Service服务器端

  eg:QQ      王者荣耀游戏软件客户端

  优点:无需记网址

  缺点:需要安装客户端,占内存,安装过程繁琐,需要手动更新

(2)BS结构(Browser------Service)

Browser浏览器-------(http协议(TCP/IP协议的升级))-----Service服务器(web服务器)

  eg:百度    

  优点:无需安装客户端,无需更新,直接从官网J进入

  缺点:要记网址

4、TCP和UDP的区别

TCP:可靠的传输协议,点对点的传输,类似于视频聊天,微信点对点的聊天。TCP传输的时候没有大小的限制。

UDP:不可靠的网络传输协议,类似于广播。使用UDP传输数据时有大小的限制,每个被传输 的数据必须限定在64kb之内。

5、基于URL的编程

URL(Uniform Resource Locator)---一一致资源定位器

表示Internet上某一资源的地址,通过URL可以访问Internet上的各种网络资源。

URL的写法:

协议的名称://资源的地址

 

http:不安全,无加密

https:安全,加密,涉及到支付功能都会用https

 

基于URL的java的网络编程:

java程序----(通过URL)------获取资源

java中对于网络编程的包在java.net中

分析:

    资源----------------(读取到)----------内存中

package URL;import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net.URL;public class URLTest {    public static void main(String[] args) {//第一步,创建URL对象        try {                URL url=new URL("http://www.baidu.com/");        //把url指向的文件或数据转换成内存中的流                try {                    InputStream inputStream=url.openStream();                    //法1、用字节读取                    /*byte[] bytes=new byte[inputStream.available()];                    inputStream.read(bytes);                    String str=new String(bytes);                    System.out.println("读取的数据:"+str);                    inputStream.close();*/                                        //法2、如果用BufferedReader读取                    BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));                    String content;                    while((content=reader.readLine())!=null){                        System.out.println(content);                    }                    reader.close();                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }                        } catch (MalformedURLException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }                }}

 

6、Socket的网络编程

(1)本质:基于TCP/IP协议的模型,实现的是网络的通讯

 

 (2)服务器端的Socket----  ServerSocket

     客户端的Socket------Socket

     大致的实现步骤:

(a)创建Socket

(b)打开连接到Socket的输入/输出流

(c)按照一定的协议对Socket进行读/写的操作

(d)关闭Socket

package Socket;import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.DataInputStream;import java.io.DataOutput;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.ServerSocket;import java.net.Socket;import java.util.Scanner;public class MyChatServer {    public static final String ADDRESS="127.0.0.1";    public static final int PORT=20019;    public static void main(String[] args) {        //第一步:构建Socket对象        try {            //监听的是本机上的端口号            ServerSocket serverSocket=new ServerSocket(PORT);            System.out.println("开始监听服务器发来的请求");            //表示监听的对象            Socket socket=serverSocket.accept();//线程阻塞的方法            //获取socket传过来的数据流            InputStream inputStream=socket.getInputStream();            //把数据打印出来            DataInputStream dataInput=new DataInputStream(inputStream) ;            String str;            System.out.println("从客户端传过来的数据");            while((str=dataInput.readUTF())!=null){                System.out.println(str);            }            System.out.println("从客户端传来的数据完毕");            OutputStream outStream=socket.getOutputStream();            DataOutputStream dataout=new DataOutputStream(outStream);                        //给客户端发送的数据            System.out.println("写给客户端的话");            Scanner sc=new Scanner(System.in);            String strcontent=sc.next();            dataout.writeUTF(strcontent);            System.out.println("通讯完毕");            socket.shutdownInput();//关流            socket.shutdownOutput();            socket.close();                } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
package Socket;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;import java.util.Scanner;import javax.xml.stream.util.StreamReaderDelegate;public class MyChatClient {    public static void main(String[] args) {                try {            //表示客户端连接的主机的地址            Socket socket=new Socket(MyChatServer.ADDRESS,MyChatServer.PORT);            System.out.println("客户端连接服务器成功");            System.out.println("请输入想服务器发送的内容");            OutputStream outStream=socket.getOutputStream();            //把数据打印出来            DataOutputStream outWriter=new DataOutputStream(outStream) ;            //给服务端发送的数据            System.out.println("写给服务器的话");            Scanner sc=new Scanner(System.in);            String strcontent=sc.nextLine();            outWriter.writeUTF(strcontent);            //接收服务端发来的数据            InputStream inputStream=socket.getInputStream();            //把数据打印出来            DataInputStream dataRead=new DataInputStream(inputStream) ;            String str;            System.out.println("服务器传来的数据");            while((str=dataRead.readUTF())!=null){                System.out.println(str);            }            System.out.println("从服务器传过来的数据完毕");            System.out.println("通讯完毕");            socket.shutdownInput();            socket.shutdownOutput();            socket.close();        } catch (UnknownHostException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}

 

转载于:https://www.cnblogs.com/Andy-/p/7467971.html

你可能感兴趣的文章
Windows Phone 7 Tips (5)
查看>>
解决C++代码单元测试中的难题-不可验证和IO调用
查看>>
对公司网站DNS解析异常的排查与处理
查看>>
visual assist 1837 支持vs2010
查看>>
android用户界面-菜单
查看>>
Mdaemon邮件服务器作为Exchange反垃圾网关部署方案
查看>>
快速更改Windows 7桌面显示
查看>>
Vlookup函数的两个使用案例分享
查看>>
常用界面布局(LinearLayout以此做的DEMO)
查看>>
【移动开发】Android中Theme和Style的使用
查看>>
TrieTree服务续篇 - 组件构成及其作用
查看>>
Linux管道命令
查看>>
MySQL 转换函数与运算符
查看>>
针对RemoteFX的Quadro
查看>>
FileItem 出现部分中文乱码解决办法
查看>>
zabbix 报警小案例
查看>>
Google Developing for Android 学习总结
查看>>
在centos7中添加一个新用户,并授权
查看>>
SWIFT中函数返回值为Tuple
查看>>
使用脚本实现登录时的Num Lock 状态
查看>>