网络编程的概念:
网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用,编程人员可以不用考虑……
网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的!中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理!
网络编程三要素:
A:IP地址 B:端口 C:协议
IP地址 = 网络地址 +主机地址
网络地址:标识计算机或网络设备所在的网段
主机地址:标识特定主机或网络设备
IP地址的分类:
A类:1.0.0.1---127.255.255.254 1.x.x.x 私有有地址(在互联网上不用,而用在局域网中)
B类:128.0.0.1---191.255.255.254 172.16.0.0---172.31.255.255 私有地址
C类:192.0.0.1---223.255.255.254 192.168.x.x私有地址
D类:224.0.0.1---239.255.255.254
E类:240.0.0.1---247.255.255.254
特殊IP:
127.0.0.1 回环地址
x.x.x.255 广播地址
x.x.x.0 网络地址
查看本机的IP地址
ipconfig
测试网络是否通畅
ping + IP地址
网络通信协议
为在网络中不同的计算机之间进行通信而建立的规则、标准或约定的集合
TCP协议(Transmission Control Protocol 传输控制协议)
面向连接的、可靠的、基于字节流的传输通信协议
UDP协议(User Datagram Protocol 用户数据报协议)
无连接的协议,在传输数据之前,客户端和服务器并不建立和维护连接
Socket套接字
是网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
socket实现的原理机制:
1、通信的两端都有Socket
2、网络通信其实就是Socket间的通信
3、数据在两个Socket间通过IO传输
java.net包
Socket
ServerSocket
DatagramPacket
DatagramSocket
InetAddress
基于TCP协议的Socket网络通信
用来实现双向安全连接网络通信
Socket通信模型
进行网络通信时,Socket需要借助数据流来完成数据的传递工作
DatagramPacket类
封装了数据报的数据、数据长度、目标地址和目标端口
DatagramSocket类
接收和发送DatagramPacket对象封装好的数据报
--以下是简单的实例
UDP协议(User Datagram Protocol 用户数据报协议)
无连接的协议,在传输数据之前,客户端和服务器并不建立和维护连接
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; //客户 public class Customer { public static void main(String[] args) throws Exception { Socket sk=new Socket("192.168.60.215",11111); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(sk.getOutputStream())); String line=null; while((line=br.readLine())!=null){ bw.write(line); bw.newLine(); bw.flush(); InputStream is=sk.getInputStream(); byte [] by=new byte[1024]; int num=is.read(by); String h=new String(by, 0, num); System.out.println("Service: "+h); } //br.close(); //bw.close(); sk.close(); } }
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; //顾客 public class Guest { public static void main(String[] args) throws Exception { //1.创建对象 ServerSocket sk=new ServerSocket(11111); //2.监听 Socket s=sk.accept(); //打包数据 BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream())); BufferedReader bw=new BufferedReader(new InputStreamReader(System.in)); OutputStream os=s.getOutputStream(); String line=null; while((line=br.readLine())!=null){ System.out.println("Client "+line); os.write(bw.readLine().getBytes()); } //释放资源 s.close(); //sk.close(); } }
TCP协议(Transmission Control Protocol 传输控制协议)
面向连接的、可靠的、基于字节流的传输通信协议
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; //客户端 public class Customerservice { public static void main(String[] args) throws Exception { DatagramSocket ds=new DatagramSocket(); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String line="hehe"; byte [] bys=line.getBytes(); int num=bys.length; InetAddress address=InetAddress.getByName("192.168.60.215"); int port=1086; DatagramPacket dp=new DatagramPacket(bys,num, address,port); ds.send(dp); ds.close(); } }
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; //服务器端 public class Serverside { public static void main(String[] args) throws Exception { DatagramSocket ds=new DatagramSocket(1086); byte[] bys = new byte[1024]; int len = bys.length; DatagramPacket dp = new DatagramPacket(bys, len); ds.receive(dp); byte[] by = dp.getData(); int length = dp.getLength(); InetAddress address = dp.getAddress(); String ip = address.getHostAddress(); String s = new String(by, 0, length); System.out.println(ip + "---" + s); ds.close(); } }