网络编程知识点总结

网络编程知识点总结


 * 一 、基础知识

 * 1.网络传输基本三要素
 *(1)IP地址:找到对方IP;
 *(2)端口:数据要发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识。
 *        为了方便称呼这个数字,叫做端口(逻辑端口);
 *        有效端口:0-65535,其中0-1024系统使用或保留端口。
 *(3)协议:定义通讯规则,这个通讯规则称为协议。国际组织定义了通用协议TCP/IP。

 * 2.层次及相应协议
 *   网际层:IP;传输层:TCP;应用层:http,ftp 

 * 3.UDP和TCP的特点
 *(1)UDP特点:面向无连接;数据封包,体积有限;不可靠;速度快
 *        应用:聊天,视频
 *(2)TCP特点(三次握手):建立连接;大数据量传输;可靠;效率稍低
 *        应用:打电话,下载

 * 4.Socket(插座)
 *    Socket就是为网络服务提供的一种机制;网络通信其实就是Scoket间的通信;数据在两个Socket间通过IO传输

 * 5.InetAddress
 * InetAddress:此类表示互联网协议 (IP) 地址
 * static InetAddress getLocalHost():返回本地主机  
 * String getHostAddress():返回IP地址
 * String getHostName():获取此IP地址的主机名 
 * static InetAddress[] getAllByName(String host):在给定主机名的情况下确定主机的IP地址 


 * 二、UDP

 * 1.Udp发送端
 * 思路:
 *(1)建立udpsocket服务;
 *(2)提供数据,并将数据封装到数据包中;
 *(3)通过socket服务的发送功能,将数据包发出去;
 *(4)关闭资源
 * 常用demo:
 * //创建udp服务,通过DatagramSocket对象(类似于邮局)
 * DatagramSocket ds = new DatagramSocket(8888);//8888为发送端端口号
 * //确定数据,并封装成数据包(类似于要寄的包裹)
 * byte[] buf = "kang xi lai le".getBytes();
 * //DatagramPacket(byte[] buf,int length,InetAddress address,int port);其中port为端口号
 * DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("localhost"),10088);
 * //通过Socket服务,将已有的数据包发送出去,通过send方法
 * ds.send(dp);
 * //关闭资源
 * ds.close();

 * 2.Udp接收端
 * 思路:
 *(1)定义udpsocket服务,通常会监听一个端口,其实就是给这个接收网络应用程序定义数据标识,
 *        方便于明确哪些数据过来该应用程序可以处理;
 *(2)定义一个数据包,因为要存储接收到的字节数据。数据包对象中有更多功能可以提取字节数据中的不同数据信息;
 *(3)通过socket服务的receive方法将收到的数据存入已定义好的数据包中;
 *(4)通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上;
 *(5)关闭资源
 * 常用demo:
 * //创建udp socket,建立端点
 * DatagramSocket ds = new DatagramSocket(10088);
 * while(true){
 *     //定义数据包,用于存储数据
 *     byte[] buf = new byte[1024];
 *     DatagramPacket dp = new DatagramPacket(buf,buf.length);    
 *     //通过服务的receive方法将收到数据存到数据包中
 *     ds.receive(dp);//阻塞式方法
 *     //通过数据包的方法获取其中的数据
 *     String ip = dp.getAddress().getHostAddress();
 *     String data = new String(dp.getData(),0,dp.getLength());
 *     int port = dp.getPort();        
 * }
 * //关闭资源
 * ds.close();    

 * 3.应用
 * 发送接收文字数据


 * 三、TCP

 * 1.基础知识
 *(1)TCP分客户端和服务端;
 *(2)客户端对应的对象是Socket,服务端对应的对象是SeverSocket    

 * 2.TCP客户端
 * 常用demo:
 * //创建客户端的socket服务,指定目的主机和端口
 * Socket s = new Socket("localhost",10020);
 * //为了发送数据,应该获取socket流中的输出流
 * OutputStream out = s.getOutputStream();
 * out.write("hello".getBytes());
 * s.close();//关闭客户端

 * 3.TCP服务端
 * 常用demo:
 * //建立服务端socket服务:SeverSocket(),并监听一个端口
 * ServerSocket ss = new ServerSocket(10020);    
 * //通过accept方法获取连接过来的客户端对象,没有连接就会等,所以这个方法是阻塞式的
 * Socket s = ss.accept();
 * String ip = s.getInetAddress().getHostAddress();    
 * //获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据,并打印在控制台
 * InputStream in = s.getInputStream();    
 * byte[] buf = new byte[1024];
 * int len = in.read(buf);
 * System.out.println(new String(buf,0,len));
 * s.close();//关闭客户端
 * ss.close();//关闭服务端(可选操作)

 * 4.应用
 *(1)定义端点接收数据并打印在控制台上
 *(2)TCP的传输的客户端和服务端的互访
 *        即:客户端给服务端发送数据,服务端收到后,给客户端反馈信息。
 *(3)建立一个文本转换服务器
 *        即:客户端给服务端发送文本,服务端会将文本转成大写再返回给客户端。而且客户端
 *        可以不断的进行文本转换。当客户端输入over时,转换结束。
 *(4)复制文件
 *(5)上传图片->客户端并发上传图片
 *(6)客户端并发登录
 *        需求:客户端通过键盘录入用户名,服务端对这个用户进行校验。
 *        如果该用户存在,在服务端显示XXX已登录,并在客户端显示XXX欢迎光临;
 *        如果该用户不存在,在服务端显示XXX尝试登录,并在客户端显示XXX,该用户不存在。
 *        最多登录三次。
 *(7)浏览器客户端-自定义服务端
 *        浏览器客户端网址输入格式:协议://主机名:端口号/资源路径/资源
 *        e.g.http://localhost:port/    http://localhost:8080/myweb/demo.html
 *(8)浏览器客户端-Tomcat服务端 
 *(9)自定义浏览器-Tomcat服务端  -->自定义图形界面浏览器-Tomcat服务端
 * 常用demo(自定义浏览器):
 * PrintWriter out = new PrintWriter(s.getOutputStream(),true);
 * out.println("GET /myweb/demo.html HTTP/1.1");//资源路径
 * out.println("Accept:*/*");//接收的内容,如jpg,word等
 * out.println("Accept-Language:zh-CN,zh;q=0.9");//接收的语言
 * out.println("Host:localhost:8080");//主机名
 * out.println("Connection:keep-alive");//连接状态    
 * out.println();//必须有空行
 * out.println();//请求的数据

       
 * 四、其他

 * 1.URL
 *(1)URL的常用方法
 * String getProtocal():获取此URL的协议名称
 * String getHost()    :获取此URI的主机名
 * int getPort()       :获取此URI的端口号
 * String getPath()    :获取此URI的路径部分
 * String getFile()    :获取此URL的文件名
 * String getQuery()   :获取此URI的查询部
 *(2)URLConnection openConnection():返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。     

 * 2.域名解析
 * DNS:域名系统
 * 域名解析,先走本地文件(C:\Windows\System32\drivers\etc\hosts),再走网络定义的DNS

 * 3.等价代码
 * BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
 * bufOut.write(line);
 * bufOut.newLine();
 * bufOut.flush();
 * 等价于
 * PrintStream ps = new PrintStream(s.getOutputStream(),true);
 * ps.println(line)

猜你喜欢

转载自blog.csdn.net/smiling_chang/article/details/81140074