java基础——网络

一、网络通讯三大要素:
1.IP地址:
1)网络中设备的标识
2)不易记忆,可用主机名
3)本地回环地址:127.0.0.1 主机名:localhost
2.端口号
1)用于标识进程的逻辑地址,不同进程的标识
2)有效端口:0~65535,其中0~1024系统使用或保留端口
3.传输协议
1)通讯的规则

2)常见协议:TCP,UDP


二、InetAddress 类
实例方法:
•boolean equals(Object other)如果对象具有和other相同的Internet地址则返回true。
•byte[ ] getAddress( )返回代表对象的Internert地址的以网络字节为顺序的有四个元素的字节数组。
•String getHostAddress( )返回代表不InetAddress对象相关的主机地址的字符串。
•String getHostName( )返回代表不InetAddress对象相关的主机名的字符串。
•int hashCode( )返回调用对象的散列码。
•boolean isMulticastAddress( )如果Internet地址是一个多播地址返回true;否则返回false。

•String toString( )返回主机名字符串和IP地址。


三、TCP、UDP协议的网络传输
1.UDP
1)将数据及源和目的封装成数据包中,不需要建立连接
2)每个数据报的大小在限制在64k内
3)因无连接,是不可靠协议
4)不需要建立连接,速度快
UDP传输:
1)DatagramSocket与DatagramPacket
2)建立发送端,接收端。
3)建立数据包。
4)调用Socket的发送接收方法。
5)关闭Socket。

发送端不接收端是两个独立的运行程序。

<span style="font-family:Arial;">public class UDPReceive {
	public static void main(String[] args) {
		try {
			//创建UDP套接字,如果要收信息,记得绑定端口号
			DatagramSocket socket = new DatagramSocket(15151) ;
			//创建数据包
			DatagramPacket p = new DatagramPacket(new byte[1024], 1024) ;
			//接受数据到一个数据包中
			socket.receive(p) ;
			//打印
			System.out.println("接受到信息:"+new String(p.getData(),p.getOffset(),p.getLength())) ;
			//关闭
			socket.close() ;
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}</span>
<span style="font-family:Arial;">public class UDPSend {
	public static void main(String[] args) {
		try {
			//创建套接字,udp创建套接字,不用在意别人的ip地址和端口
			DatagramSocket socket = new DatagramSocket() ;
			//
			byte[] buf = "大家好!!!!".getBytes() ;
			//创建数据包,要给谁发信息,就在信息里带上她的ip和端口
//			DatagramPacket p = new DatagramPacket(buf, 0, buf.length, InetAddress.getByName("177.16.1.116"), 15151);
//			DatagramPacket p = new DatagramPacket(buf, 0, buf.length, new InetSocketAddress(InetAddress.getByName("177.16.1.116"), 15151));
			/**
			 * UDP广播
			 * 1.得到本网络的广播地址
			 * 2.177.16.1.116&255.255.255.0 = 177.16.1.0
			 * 3.177.16.1.255->我们这个网络的广播地址
			 * */
			DatagramPacket p = new DatagramPacket(buf, 0, buf.length, InetAddress.getByName("177.16.1.255"), 15151);
			//发送数据包
			socket.send(p) ;
			//关闭
			socket.close() ;
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}</span>

2.TCP
1)建立连接,形成传输数据的通道。
2)在连接中进行大数据量传输
3)通过三次握手完成连接,是可靠协议
4)必须建立连接,效率会稍低
TCP传输:
1)Socket和ServerSocket
2)建立客户端和服务器端
3)建立连接后,通过Socket中的IO流进行数据的传输
4)关闭socket

客户端不服务器端是两个独立的应用程序。

<span style="font-family:Arial;">public class ServerSocketTest {
	/**
	 * 服务端
	 */
	public static void main(String[] args) {
		try {
			//创建一个ServerSocket对象
			ServerSocket sSocket=new ServerSocket(3231);
			//创建套接字,调用accept方法,等待在端口上,一直阻塞在这里。
			Socket s=sSocket.accept();
			//打印连接上来的socket的ip地址
			System.out.println("得到一个连接"+s.getInetAddress().toString());
			//获取向客户端的输出流,并包装到一个BufferedWriter
			OutputStream os=s.getOutputStream();
			BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));
			//发送信息
			bw.write("Hello! How are you!");
			//清除数据,把消息推前;
			bw.flush();
			//关闭
			bw.close();
			sSocket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}</span>
<span style="font-family:Arial;">public class ScoketTest {
	/**
	 * 客户端
	 * */
	public static void main(String[] args) {
		try {
			//创建一个Scoket对象,直接连接到服务器
			Socket s=new Socket("177.16.1.111",3231);
			//服务器会先发送一个消息给客户端,所以先接受
			InputStream in=s.getInputStream();
			//添加处理流
			BufferedReader reader=new BufferedReader(new InputStreamReader(in));
			//读取一行
			String str=reader.readLine();
			//打印
			System.out.println("服务器说了一问候语:"+str);
			//关闭流
			reader.close();
			//关闭客户端
			s.close();
			
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		</span>

四、URL类的使用
获取URL对象的属性:
•getDefaultPort(): 返回默认的端口号。
•getFile(): 获得URL指定资源的完整文件名。
•getHost(): 返回主机名。
•getPath(): 返回指定资源的文件目录和文件名。
•getPort(): 返回端口号,默认为-1。
•getProtocol(): 返回表示URL中协议的字符串对象。
•getRef(): 返回URL中的HTML文档标记,即#号标记。
•getUserInfo: 返回用户信息。
•toString: 返回完整的URL字符串。

•HttpURLConnection类的使用


五、HttpURLConnection
利用HttpURLConnection来服务器交互的基本过程:
1)将访问路径封装成URL对象,通过URL对象获取到HttpURLConnection。
2)设置连接参数。
3)连接到服务器。
4)向服务器写数据(可选)。

5)读取服务器返回的数据。

<span style="font-family:Arial;">public class BreakPiontDownload {
	public static void main(String[] args) {
		try {
			//创建URl地址
			URL url=new URL("http://ff.topit.me/f/93/fc/1193758571a00fc93fo.jpg");
			//通过URL的openConnection()创建HttpURLConnection方法
			HttpURLConnection connection=(HttpURLConnection) url.openConnection();
			//断点续存文件,接着以前的数据开始写
			File breakFile=new File("e:/girl3.jpg");
			long downLength= breakFile.length();
			//从断点处继续续存
			connection.setRequestProperty("Range", "bytes="+downLength+"-");		
			//获取输入流
			InputStream is=connection.getInputStream();	
			//下载文件保存
			RandomAccessFile raf=new RandomAccessFile(breakFile,"rwd");
			//从哪个地方开始下载
			raf.seek(downLength);
			System.out.println("length: "+connection.getContentLength());
			//边读点写
			byte[] bytes=new byte[2014];
			int readLength=0;
			while((readLength=is.read(bytes))!=-1){
				raf.write(bytes,0,readLength);				
			}
		
		} catch (IOException e) {
			e.printStackTrace();
		}
	}</span>

六、HTTP协议
请求方法(所有方法全为大写)有多种,各个方法的解释如下:
•GET 请求获取Request-URI 所标识的资源;
•POST 在Request-URI 所标识的资源后附加新的数据;
•HEAD 请求获取由Request-URI 所标识的资源的响应消息报头;
•PUT 请求服务器存储一个资源,并用Request-URI 作为其标识;
•DELETE 请求服务器删除Request-URI 所标识的资源;
•TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断;
•CONNECT 保留将来使用;
•OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值