一、网络编程
概念:不同地理位置的计算机进行通信。
三要素:Ip地址,端口号,协议
IP地址
网络中每一台计算机的标识。
Ip地址分为5类。
A类 1.0.0.0 到126.0.0.0
0.0.0.0 和127.0.0.0保留
B类 128.1.0.0到191.254.0.0
128.0.0.0和191.255.0.0保留
C 类 192.0.1.0 到223.255.254.0
192.0.0.0和223.255.255.0保留
D 类 224.0.0.0到239.255.255.255用于多点广播
E 类 240.0.0.0到255.255.255.254保留
255.255.255.255用于广播
端口:用于标识进程的逻辑地址
协议:制定的规则。包括Tcp 和UDP
UDP: 1.数据源和目的源封装成数据包
2.不需要建立连接
3 . 每个数据包的大小限制走64k
4.是不可靠的协议
5.不需要建立连接,速度快
TCP: 1.建立连接,形成数据传输通道。
2.数据大小无限制
3,通过3次握手建立连接
4,可靠的协议
5. 必须建立连接,速度慢
二、Socket机制
它为网络编程提供一种机制,包装了端口和IP地址。
通信两端都有Socket. 网络通信其实就是Socket通信。 网路编程也叫Socket编程或套接字编程
三、InetAddress类
它是一个IP地址包装类,没有构造方法,找静态方法直接使用类名调用或找静态方法中返回值是InerAddress.通过这个方法获取对象
方法: public static InetAddress getByName(String host)// 通过主机名取的IP地址(对象形式)
public String getHostAddress()// 返回IP地址字符串
public String getHostName() //根据IP获取主机名字
四、UDP 接收数据
1.发送数据
思路: 1.建立发送端Socket服务对象
2.创建数据,并装包
3.放送数据
4,释放资源
class sendData{
public static void main(String[] args){
DatagramSocket ds = new DatagramSocket;//封装数据源
String str = "hello";//创建数据
byte[] bytes = str.gerBytes();
int length = bytes.length();
InetAddress adress = InesAddress.getByName(192.168.2.4);
int port = 123;
DatagramPacket dp = new DatagramPacket(bytes,lenght,address,port);//创建包
ds.seng(dp);//放松数据
ds.close();//释放资源
}
}
2.接收数据。
思路:1.建立接收端Socket服务对象
2.创建数据包
3.调用接收方法。
4,解析数据包,把数据显示在控制台上,
5,释放资源
代码:
class ReceiveData{
publci static void main (String[] str){
DatagramSocket ds = new DatagramSocket(123);// 创建接收端对象
byte[] bytes = new byte[1024];
int lenght = bytes.lenght;
DatagramPacket dp = new DatagramPacket( bytes,lenght);//创建数据包
ds.receive(dp);//调用接收方法
InerAddress address = dp.getAddress();
String ip = address.getHostAddress() ;
byte[] bytes1= dp.getData();//解析数据
Stirng str = new String( bytes,o,bytes.lenght);
system.out.println(ip+..........+str);
ds.close();//释放资源
}
}
五、TCP协议
1.客户端:、
思路:1.:创建客户端的Socket对象
2.:建立连接
3.:获取输出流,写数据即可
4.:释放资源
代码:
public class ClientDemo {
public static void main(String[] args) throws IOException {
// 创建客户端的Socket对象,建立连接
Socket s = new Socket("192.168.3.100", 10010);
// 获取输出流,写数据即可
// public OutputStream getOutputStream()
OutputStream os = s.getOutputStream();
os.write("hello,tcp,我来了".getBytes());
// 释放资源
s.close();
}
}
2.服务器
思路:
1.创建服务器端Socket对象
2.:监听连接
3.:获取输入流,读取数据,并显示
4.释放资源
public class ServerDemo {
public static void main(String[] args) throws IOException {
// 创建服务器端Socket对象
ServerSocket ss = new ServerSocket(10010);
// 监听连接
Socket s = ss.accept();//阻塞
// 获取输入流,读取数据,并显示
InputStream is = s.getInputStream();
byte[] bys = new byte[1024];
int len = is.read(bys);//阻塞
String client = new String(bys, 0, len);
System.out.println(client);
// 释放资源
s.close();
}
}