------- android培训、java培训、期待与您交流! ----------
网络编程
一、网络编程的三要素
IP
IP=网络号+主机号
端口
每个网络应用程序有有一个端口
协议
UDP/TCP协议
IP分类:
A类地址:1个网络号+3个主机号 政府使用
B类地址:2个网络号+2个主机号 事业单位(银行、学校)
C类地址:3个网络号+1个主机号 个人
二、InetAddress类
A类地址:1个网络号+3个主机号 政府使用
B类地址:2个网络号+2个主机号 事业单位(银行、学校)
C类地址:3个网络号+1个主机号 个人
二、InetAddress类
InetAddress没有构造函数,这是一个单例设计模式,提供了一个get方法获取InetAddress对象
InetAddress类的方法:
InetAddress.getLocalHost() 返回本机的IP地址对象
inetAddress.getHostAddress() 返回IP的字符串表现形式
inetAddress.getHostName() 获取主机名
getByName(String name) 在给定主机名、ip地址的情况下确定主机的IP地址。
getByName("IP"); inetAddress.getHostName() 通过IP获取主机名
InetAddress类的方法:
InetAddress.getLocalHost() 返回本机的IP地址对象
inetAddress.getHostAddress() 返回IP的字符串表现形式
inetAddress.getHostName() 获取主机名
getByName(String name) 在给定主机名、ip地址的情况下确定主机的IP地址。
getByName("IP"); inetAddress.getHostName() 通过IP获取主机名
三、UDP和TCP协议
UDP协议
将数据和目的地封装在数据包中,不需要建立连接。每个包大小不能超过64K。是不可靠的,速度快。
TCP协议
建立数据传输的通道,在连接中进行大量数据传输,通过三次握手完成,是可靠地,效率稍低。
四、UDP协议的使用
发送端的使用步骤:
1、创建DatagramSocket()对象
2、创建要传输的数据
3、创建数据包对象
4、发送数据包对象
5、关闭资源
<pre name="code" class="java">package it.heima.socket;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;
public class UdpDemo {
public static void main(String[] args) throws SocketException, IOException {
DatagramSocket datagramSocket=new DatagramSocket();<span style="white-space:pre"> </span>//创建DatagramSocket()对象
outer:while(true){
Scanner sc=new Scanner(System.in);<span style="white-space:pre"> </span>//创建数据
String s=sc.nextLine();
while(s!=null){
byte[] buf = s.getBytes();<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>//创建数据包
DatagramPacket datagramPacket=new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(), 9090);<span style="white-space:pre"> </span>
datagramSocket.send(datagramPacket);<span style="white-space:pre"> </span>//发送数据包
if(s.equals("exit")){
break outer;
}
s=null;
}
}
datagramSocket.close();<span style="white-space:pre"> </span>//关闭资源
}
}
接收端的使用步骤:
1、创建DatagramSocket()对象
2、创建要接收的数据的容器
3、创建接收数据包对象
4、接收数据包对象
5、获取接收缓冲数组内容
6、关闭资源
package it.heima.socket;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UddpServer {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket=new DatagramSocket(9090);<span style="white-space:pre"> </span>//创建接收DatagramSocket()
while(true){
byte[] buf=new byte[1024];<span style="white-space:pre"> </span>//创建接收容器
int length=buf.length;
DatagramPacket datagramPacket=new DatagramPacket(buf, length);<span style="white-space:pre"> </span>//创建接收数据包
datagramSocket.receive(datagramPacket);<span style="white-space:pre"> </span>//接收数据包
byte[] buf2=datagramPacket.getData();<span style="white-space:pre"> </span>//获取数据包缓冲数组
int length2=datagramPacket.getLength();<span style="white-space:pre"> </span>//获取数据的实际长度
String s=new String(buf2,0,length2);<span style="white-space:pre"> </span>//输出
if(s.equals("exit")){
break;
}
System.out.println(s);
}
datagramSocket.close();
}
}
UDP协议的接收和发送都是通过DatagramSocket()对象完成的
UDP协议接收端和发送端都有DatagramPacket()数据包的操作
UDP发送端的DatagramPackage()需要 byte数组(内容)、内容长度、发送的IP地址、接收端的端口号
UDP接收端的
DatagramPackage()只需要有存储byte数组和数组长度就可以了,但是DatagramSocket需要端口号
五、TCP协议的使用
TCP协议客户端使用:
1、创建客户端对象
2、创建流通道
3、创造接收或发送的byte数组
4、接收或发送数据
5、关闭资源
1、创建客户端对象
2、创建流通道
3、创造接收或发送的byte数组
4、接收或发送数据
5、关闭资源
package it.heima.tcp2;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
public class SocketDemo {
public static void main(String[] args) throws IOException {
//1、创建Socket对象
//2、创建流通道
//3、接收
//关闭资源
Socket socket=new Socket(InetAddress.getLocalHost(), 8080);
InputStream inputStream=socket.getInputStream();
FileOutputStream fileOutputStream=new FileOutputStream("F:\\2.png");
byte[] buf=new byte[1024];
int length;
while((length=inputStream.read(buf))!=-1){
fileOutputStream.write(buf, 0, length);
}
fileOutputStream.close();
socket.close();
}
}
TCP协议服务端的使用:
1、创建ServerSocket对象
2、等待客户端连接
3、创建流通道
4、创建byte数组来接收或发送数据
5、发送或接收数据
6、关闭资源
package it.heima.tcp2;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
public class SocketDemo {
public static void main(String[] args) throws IOException {
//1、创建Socket对象
//2、创建流通道
//3、接收
//关闭资源
Socket socket=new Socket(InetAddress.getLocalHost(), 8080);
InputStream inputStream=socket.getInputStream();
FileOutputStream fileOutputStream=new FileOutputStream("F:\\2.png");
byte[] buf=new byte[1024];
int length;
while((length=inputStream.read(buf))!=-1){
fileOutputStream.write(buf, 0, length);
}
fileOutputStream.close();
socket.close();
}
}