学习笔记09-网络编程

来源:互联网 发布:优化服务质量是什么 编辑:程序博客网 时间:2024/05/11 00:09

网络编程


网络编程:Scoke编程(通信),套接字编程

概述:就是用来实现网络互连的不同计算上运行的程序间可以进行数据交换。
  简单说:就是用来实现多台计算机之间进行信息交互的。
理解:
网络编程也叫Socket编程,计算机之间的通信其实就是Scoke之间的通信(通信两端都有自己的Socket)。


三大要素:
IP:
就是计算机(设备)在网络的唯一标识。
DOS命令:
查看本机IP地址: ipconfig /all
测试网络连接:ping IP地址
IP地址的组成:
网络号码和本机地址。
***.***.***.***   (范围是0-255)
A类:前三段都是网络号码,最后一段是本机地址。  (局域网)
B类:前两段是网络号码,后两段是本机地址。(校园网)
C类:第一段是网络号码,后三段是本机地址。(广域网)
两个特殊的IP:
本地回环地址:127.0.0.1
广播地址:255.255.255.255


端口号:
就是程序在计算机上的唯一标识。
端口号的范围:0-65535。
我们使用端口号的时候,注意,尽量不要使用0-1024之间的,因为已经被系统占用了。


协议:
简单说:就是不同计算机之间进行数据交换的规则。
UDP协议:
特点:面向无连接,数据不安全(有数据限制,每个数据报包大小必须控制在64K以下),速度快。不区分客户端和服务端。

发送端:
1、创建发送端Socket对象(DatagramSocket类)。
2、创建数据报包。(DatagramPacket类)
DatagramPacket(要发送的内容-字节数组形式,数组的长度,IP地址,端口号);
怎么获取自己的IP地址?
InetAddress.getByName(主机名或者IP地址);
3、调用DatagramSocket类的send()方法发送数据包。
4、关闭发送端Socket对象。




接收端:
1、创建接收端Socket对象(DatagramSocket类)。
2、创建数据报包接收发送端传过来的数据。
public DatagramPacket(byte[] buf, int length)
3、调用DatagramSocket类的receive()方法接收传过来的数据。
socket.receive(DatagramPacket类的对象);
4、从数据包中获取数据:
getData();  从数据包中获取数据(字节数据形式)
getLength(); 获取有效的数据的字节长度。

//InetAddress 可以看做是IP地址的包装类
DatagramPacket类的对象.getAddress().getHostAddress();  //返回的是字符串类型的IP地址
DatagramPacket类的对象.getPort();   //获取端口号(int类型)


5、把接收到的数据转成字符串,并打印(可写可不写)
6、关闭接收端Socket对象。



TCP协议:
特点:面向有连接(三次握手),数据安全,速度低。区分客户端和服务端的。

UDP协议发送和接收数据:
普通版(只实现发送和接收就可以了)。
不断发送和接收。(while改进)
发送端和接收端在一个窗口。(多线程改进版)


小案例:
GUI改进版。(不作为重点掌握,有时间了玩儿玩儿就行)
发送:
ActionListener
记录:
把聊天记录写入到一个文本文件中。(注意:是追加写入)
//实际开发中,这些信息都是存在数据库中的。
清屏:
震动:
原理:在两个(多个坐标)进行快速的切换。
如何实现震动的?
判断传过来的字节数组的首个字节时候是-1,如果是,就震动,并且停止本次发送。
如果不是,就正常发送。
快捷键:
添加一个键盘监听,KeyListener
生成jar包:



TCP协议:
需要建立连接(三次握手),速度慢,数据是安全的。


客户端:
1、创建一个客户端Socket对象(指定IP和端口号),通过IP地址和连接对应的服务器。
2、通过Socket类的getInputStream()方法和getOutputStream()方法获取和服务器端相连的IO流。
客户端输入流可以读取 服务器端输出流写出的内容
客户端输出流可以写出 数据 到服务器端输入流


服务器端:
1、创建服务器端Socket对象(指定端口)。
创建ServerSocket类的对象。
2、监听连接。
调用ServerSocket类中的accept()方法创建和该客户端通信的Socket对象。
3、通过Socket类的getInputStream()方法和getOutputStream()方法获取和客户端端相连的IO流。
服务器端输入流可以读取 客户端端输出流写出的内容
服务器端输出流可以写出 数据 到客户端输入流


用多线程改进服务器端:
用匿名内部类的方式把服务器端的 读写数据的代码给封装起来就可以了。


0 0