Java基础之网络编程
IP地址
IP地址是由32位或者128位无符号数表示的网络层通信地址,是一种低级协议,TCP和UDP协议都是在它的基础上构建的。Java中使用InetAddress来表示IP地址,它有两个子类Inet4Address和Inet6Address,分别表示IPV4和IPV6。
getByName()方法通过主机名获取到InetAddress对象,若有多个主机,则使用getAllByName()返回InetAddress对象数组。
Socket套接字
Socket是提供网络服务的一种机制,通信的两端都有socket,两端通过socket进行通信。InetSocketAddress封装了IP+端口号。
TCP/UDP协议的特点
UDP协议
UDP协议将数据封装成数据报,大小在64KB以内,无须建立连接,速度快,不可靠。Java使用DatagramSocket类描述用来发送和接收数据包的socket,而使用DatagramPacket来描述UDP协议的数据包,用于描述无连接包投递服务。
数据发送
-
建立UDPsocket服务,指定发送端口: DatagramSocket ds=new DatagramSocket(localport);
-
将字节数据封装在数据包中:DatagramPacket dp=new DatagramPacket(buf,buf.length,ia,receiveport)
-
通过socket发送功能发送: ds.send(dp)
-
关闭资源:ds.close()
数据接收
-
建立UDPsocket服务,指定监听端口:DatagramSocket ds=new DatagramSocket(receiveport);
-
定义数据包用来接收数据:DatagramPacket dp=new DatagramPacket(buf,buf.length)
-
通过socket接收功能接收数据并提取:ds.receive(dp);dp.getData();
-
关闭资源:ds.close()
TCP协议
TCP协议需要建立连接,在连接中传输大量数据(不需封装成数据报),通过三次握手完成连接,是可靠协议,但效率低。Java使用Socket来描述客户端的socket服务,使用SocketSever来描述服务器端的socket服务。
客户端
-
创建客户端并指定要连接的服务器的IP和端口:Socket cs=new Socket(InetAdress,serverport)
-
通过socket对象中的输入流和输出流分别发送和接收数据:
-
获取到输出流OutputStream os=cs.getOutputStream();
-
将数据写入到输出流中:os.write(byte[]);
-
获取到输入流:InputStream is=cs.getInputstream()
服务器端
-
创建服务端的ServerSocket服务,并监听一个端口:SeverSocket ss=new ServerSocket(serverport)
-
获取连接过来的客户端对象:Socket s=ss.accept();该方法是阻塞式方法。
-
使用客户端对象的读取流来读取发送过来的数据:
-
获取到输入流InputStream is=s.getInputstream()
-
将数据读取到字节数组中Is.read(buf)
-
获取到输出流:OutputStream os=s.getOutputStream();
-
通信完毕关闭客户端s.close()
ServerSocket对象初始化时,可以通过设置backlog参数来指定能最大连接到服务器的客户端个数
URL类
URL是统一资源定位符,该类可以根据指定形式构建URL对象。
-
getHost()获取主机名
-
getFile()获取文件名
-
getPath()获取路径部分
-
getPort()获取端口号,当URL中没有指定时返回-1;
-
getProtocal()获取协议名
-
getQuery()获取请求部分
-
openConnection()返回一个URL的连接对象
-
openStream()打开一个URL连接并返回一个用于从该连接读入的InputStream
URLConnection类
该类是抽象类,有两个子类HttpURLConnection和JarURLConnection来实现。该类封装了传输层的socket对象,可以直接读取socket流对象
-
getInputStream()返回socket的读取流对象,用于数据的读取从该连接返回的数据。
-
getContent()获取到URL连接的内容