首页 > 代码库 > 黑马程序员_网络编程
黑马程序员_网络编程
IP地址
1、IP地址的分类
A类1.0.0.0到126.0.0.0
B类128.1.0.0到191.254.0.0
C类192.0.1.0到223.255.254.0
D类224.0.0.0到239.255.255.255
E类240.0.0.0到255.255.255.254
局域网内的IP 192.168开头
本地回环地址:127.0.0.1。本机的IP地址,只要网卡工作正常,127.0.0.1
2、java.net.InetAddress
描述IP地址对象的类,没有构造方法
InetAddress类中的方法:
static InetAddress getLocalHost() 返回本机IP地址对象
String getHostName() 返回主机名
String getHostAddress() 返回主机对应的IP地址
static InetAdress getByName(String 主机名) 获取到的是主机名对应的IP地址
3、端口号
如果一个程序占用了一个端口,别的程序将不能使用这个端口了
0-65535:可使用的端口号
0-1024:系统的保留端口号
80:互联网访问的默认端口号
21:FTP上传端口号
3306:MySQL数据库的连接端口
1521:Oracle数据库的连接端口
1433:MS SQLServer数据库的连接端口
通讯协议
1、UDP协议
UDP协议的特点:
面向无连接
不安全,数据可能丢失
数据限制在64KB以内
速度快
适合做即使通讯,如:飞秋、qq、MSN
2、Socket服务
通讯工具,通信双方必须有Socket服务。将你的数据传递给Socket传输工具,将数据发送出去,接受者也是通过Socket工具
来接受发来的数据。
DategramPacket数据包对象
DategramSocket,UDP的通信工具,发送数据和接受数据
3、UDP发送端的操作
将数据封装成数据包DategramPacket DategramSocket(数组,数组长度,目的IP地址,接受方端口号)
建立通信工具DategramSocket对象
将数据包交给工具DategramSocket进行发送
关闭资源
1 import java.net.*; 2 public class UDPSend { 3 public static void main(String[] args)throws Exception { 4 5 byte[] bytes = "你好UDP".getBytes(); 6 //创建数据包对象 7 DatagramPacket dp = new 8 DatagramPacket(bytes, bytes.length, InetAddress.getByName("127.0.0.1"),8000); 9 //创建通信工具Socket服务,DataGramSocket10 DatagramSocket ds = new DatagramSocket(10000);11 //调用ds的send方法,传递数据包12 ds.send(dp);13 //关闭资源14 ds.close();15 }16 }
4、UDP的接受端的操作
建立数据包对象,接受发送的数据包
建立通信工具DategramSocket对象 DategramSocket(字节数组,长度)
将数据包交给工具DategramSocket进行接受 receive(数据包)
将数据包进行拆开
拆包:
将字节数组变成字符串
DategramPacket类中的方法getLength()发送的有效字节数
DategramPacket类中的方法getPort()发送方的端口号
DategramPacket类中的方法getAddress()获取发送方的IP地址对象InetAddress类型,
getHostAddress()用这个IP对象获取IP地址
关闭资源
1 import java.net.*; 2 public class UDPReceive { 3 public static void main(String[] args) throws Exception{ 4 byte[] bytes = new byte[10]; 5 //创建数据包 6 DatagramPacket dp = new DatagramPacket(bytes, bytes.length); 7 //建立通信工具,打开端口,监听一个端口 8 DatagramSocket ds = new DatagramSocket(8000); 9 //调用ds的receive(数据包)10 ds.receive(dp);//接收的方法,线程等待效果11 //获取有效字节数12 int length = dp.getLength();13 //端口号14 int port = dp.getPort();15 //发送的IP对象16 String ip = dp.getAddress().getHostAddress();17 System.out.println(new String(bytes,0,length )+" "+ip+" "+port);18 //关闭资源19 ds.close();20 }21 }
5、TCP的协议
TCP协议的特点:
面向连接
安全
适合大数据传输
三次握手,速度慢
适合做安全的数据传输,如:下载,在线视频
IO的数据传输都是字节流,通过Socket连接对象获取,不能自己创建
6、TCP的客户端的操作
创建连接对象Socket Socket("IP",端口号)
通过Socket对象获取字节输出流,将数据发送到服务器
通过Socket对象获取字节输入流,读取服务器发回的数据
关闭资源
1 import java.io.*; 2 import java.net.*; 3 public class FileClient { 4 public static void main(String[] args) throws Exception { 5 Socket s = new Socket("192.168.1.102",8100); 6 FileInputStream fis = new FileInputStream("e:\\2.jpg"); 7 OutputStream out= s.getOutputStream(); 8 int line=0; 9 byte[] bytes =new byte[1024];10 while((line=fis.read(bytes))!=-1){11 out.write(bytes,0,line);12 }13 // 结束标记14 s.shutdownOutput();15 InputStream in = s.getInputStream();16 line= in.read(bytes);17 System.out.println("服务器说:::"+new String(bytes,0,line));18 fis.close();19 s.close();20 }21 }
7、TCP的服务器端的操作
建立服务器的连接对象SeverSocket
获取客户端的连接对象,知道那个客户端和服务器连接,SeverSocket类的方法accept
获取到了客户端的连接对象,可以从客户端的连接对象Socket获取对象
1 import java.io.*; 2 import java.net.*; 3 import java.util.*; 4 public class FileServer { 5 public static void main(String[] args)throws Exception { 6 ServerSocket ss = new ServerSocket(8100); 7 Socket s = ss.accept(); 8 InputStream in = s.getInputStream(); 9 File file = new File("d:\\a");10 if(!file.exists())11 file.mkdirs();12 String filename=System.currentTimeMillis()+ new Random().nextInt(100)+".jpg";13 FileOutputStream fos = new FileOutputStream(file+File.separator+filename);14 int line=0;15 byte[] bytes =new byte[1024*1000];16 while((line=in.read(bytes))!=-1){17 fos.write(bytes,0,line);18 }19 OutputStream out = s.getOutputStream();20 out.write("上传成功".getBytes());21 fos.close();22 s.close();23 ss.close();24 }25 }
黑马程序员_网络编程