目录
一、网络编程
使开发的程序,借助网络,在不同计算机之间进行数据传输。
Java语言支持网络传输的,将连接网络的细节都封装好了,提供给程序员的都是Api,使用这些类,可以轻松开发出具有网络通信 的软件。
计算机网络:通过通信线路(光纤,交换机,网线),把不同区域的计算机(广义)连接起来,通过特定的软件,能够实现信息,数据的共享。
二、通信要素
IP:
寻址 找主机 每台电脑都有一个ip 局域网ip(192.168.110) 广域网ip
网络中的计算机使用ip地址进行唯一标识
本地回环地址::127.0.0.1 访问自己电脑的,如果你的计算机没有连接任何的通信设备,
端口:
端口号是与计算机上的程序对应的 ,每个运行中的程序都会分配一个端口号,不能重复
端口号范围是0-65535 0-1024被系统占用 定义时1024-65535
通信协议:
通信双方,如何安全可靠的进行数据传输,传输什么内容,什么速度传,传的过程中出问题了怎么解决---->协议
在传输层,有两个非常重要的协议
TCP:
传输控制协议TCP(Transmission Control Protocol) 安全可靠,
必须先测试网络是否通畅
三次握手:
客户端 服务器
在吗 ------------------------>第一次
第二次<----------------------在的 两次不行 不知道客户端是否连接
知道了------------------------->第三次
四次挥手:
客户端 服务器
我要走了 ------------------------>第一次
第二次<---------------------- 知道了
第三次<-------------------------将其他的带走
真走了--------------------------->第四次
UDP:
用户数据报协议UDP(User DatagramProtocol)。
将数据封装在一个数据报中,包含数据源,目标,数据 每次就只管发送,发送失败或者成功,都不知道 速度快,但不安全.
三、java基于TCP协议封装的类,如何使用
Socket 客户端
ServerSocket 服务器端
先启动服务器
再启动客户端
服务器,有一个监听程序,监听到了,获取对应客户端程序
ServerSocket 服务器端
public static void main(String[] args) throws IOException {
//只需要定义端口
//创建服务器端,指定端口,ip与计算机本机相同,程序在那台电脑运行,ip就是那个
ServerSocket serverSocket=new ServerSocket(9999);
System.out.println("服务器启动成功");
//在服务器端监听客户端,是阻塞式的, 如果有程序连接,就会接受到对应的客户端程序
Socket socket=serverSocket.accept();
System.out.println("客户端连接成功"+socket);
//客户端连接成功Socket[addr=/127.0.0.1,port=53907,localport=9999]
//获取输入流对象
InputStream in=socket.getInputStream();
DataInputStream datain=new DataInputStream(in);
//处理流直接拿到字符串
System.out.println(datain.readUTF());
}
Socket 客户端
public static void main(String[] args) {
//创建客户端程序,创建时会进行三次握手来检测网络,以及服务器是否正常
try {
Socket socket=new Socket("127.0.0.1",9999);
OutputStream out=socket.getOutputStream();//获取输出流对象
DataOutputStream dataout=new DataOutputStream(out);
dataout.writeUTF("你好--服务器");
} catch (IOException e) {
e.printStackTrace();
System.out.println("网络连接失败/ 服务器未启动");
}
}
四、java基于UDP协议封装的类,如何使用
发送端
public static void main(String[] args) throws IOException {
//负责发送和接受数据
DatagramSocket datagramSocket=new DatagramSocket();
//数据报封装
String s="你好 接收端";
DatagramPacket datagramPacket=new DatagramPacket(s.getBytes(),s.getBytes().length, InetAddress.getByName("127.0.0.1"),9999);
datagramSocket.send(datagramPacket);//发送数据
datagramSocket.close();
}
接收端
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket=new DatagramSocket(9999);
byte []b=new byte[1024];
DatagramPacket datagramPacket=new DatagramPacket(b,b.length);
datagramSocket.receive(datagramPacket);//接受数据
String s=new String(datagramPacket.getData(),0,datagramPacket.getLength());
System.out.println(s);
}