黑马程序员-------------网络编程

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、网络模型
网络七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
    一般来说开发处于传输层和网际层,应用层为:FTPHTTP协议等,传输层为:UDPTCP等,网际层为:IP
网络通信:协议:IP,端口号。IP地址全球唯一。
IP地址对应InetAddress类。存在Java.包中。
InetAddress类的一些方法:无构造函数,可通过getLocalHost()方法获取InetAddress对象,此方法是静态的,返回本类对象。
代码实例:
import java.net.InetAddress;
import java.net.UnknownHostException;

public class IpDemo {

	/**
	 * 获取IP地址练习
	 * @param args
	 * @throws UnknownHostException 
	 */
	public static void main(String[] args) throws UnknownHostException {
		// 获取IP地址对象
		InetAddress ip = InetAddress.getByName("www.baidu.com");
		// 获取主机IP
		String str_ip = ip.getHostAddress();
		String ip_dns = ip.getHostName();
		System.out.println("IP:"+str_ip+"\r\n主机名:"+ip_dns);	

	}
}

二、UDP(不面向连接)
     特点:1.将数据源和目的封装到数据包中,不面向连接
2.最多一次传输64K;
3.不面向连接,不可靠传输。
4.传输速度慢。
主要应用:聊天、视频播放等传输要求速度快的。
代码:
package com.itheima.udp;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class SendPictureDemo {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		System.out.println("UDP发送...........");
//		1.建立发送服务
		DatagramSocket ds = new DatagramSocket();
//		2.明确发送源
		String send_str = " UDP 传输实现... ";
//		File file = new File("F:\\456.png");
//		long b =file.length();
//		System.out.println(b);
//		ByteArrayInputStream bis = new ByteArrayInputStream ();
		byte[] buf = send_str.getBytes();
		DatagramPacket dp =new DatagramPacket(buf, buf.length, 
				InetAddress.getByName("127.0.0.1"), 8888);
//		3。发送数据
		ds.send(dp);
//		4.关闭服务
		ds.close();

	}

package com.itheima.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class Receive {

	/**
	 * 思路:
	 * 1.建立udp的接受端
	 * 2.接受数据包
	 * 3.获取IP,端口号,数据包内容
	 * 4.关闭资源
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
//		1.建立udp的接受端
		System.out.println("UDP接受......");
		DatagramSocket ds = new DatagramSocket(8888);
//		2.接受数据包
		byte[] buf = new byte[1024];
		DatagramPacket dp = new DatagramPacket(buf, buf.length);
		ds.receive(dp);//阻塞方法,会一直等待。
//		3.获取IP对象
		InetAddress ia = dp.getAddress();
		String str_ip = ia.getHostAddress();
		String str_name =ia.getHostName();
//		获取端口号
		int str_port = ds.getPort();
//		获取传输内容;
		System.out.println("   "+new String (dp.getData() ,0 ,dp.getLength())+"   ::::"+str_ip+"::::::"+str_name+"  "+str_port);
	}

}


三、TCP(面向连接)
特点:1.建立连接,形成传输通道。
  2.一次可以传输大量数据。
  3.面向连接,可靠传输。
  4.传输慢。
应用:文件的上传,下载,可靠性高的。

代码实例:
package com.itheima.tcp;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class ClientDemo {

	/**
	 * TCP通信练习
	 * @param args
	 * @throws IOException 
	 * @throws UnknownHostException 
	 */
	public static void main(String[] args) throws IOException {
		System.out.println("客户端开启.......");
		//1.建立TCP服务
		Socket s = new Socket("127.0.0.1",10005);
//		
		OutputStream os = s.getOutputStream();
//		写入流
		os.write("hello".getBytes());
		os.close();

	} 

}


package com.itheima.tcp;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerDemo {

	/**
	 * 接收端
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
//		建立TCP服务端对象
		System.out.println("服务端开启。。。");
		ServerSocket ss = new ServerSocket(10005);
//		接受
		Socket s = ss.accept();
		
		InetAddress ip = s.getInetAddress();
		String str_ip = ip.getHostAddress();
		
		System.out.println("IP:"+str_ip);
//		数据源
		InputStream is = s.getInputStream();
		byte[] buf = new  byte[1024];
		int len = 0;
//		读取数据
		while ((len = is.read(buf)) != -1) {
			System.out.println(new String(buf, 0 ,len));
			break;
		}

		反馈数据
//		PrintWriter pw = new PrintWriter(s.getOutputStream() ,true);
//		pw.println("<h1> nihao </h1>");
//		is.close();
		s.close();
//		pw.close();
		ss.close();
	}

}

四、URL(统一资源定位符)
       统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。
常用方法:
看代码:
package com.itheima.url;

import java.io.IOException;
import java.io.InputStream;

import java.net.URL;
import java.net.URLConnection;

public class UrlDemo {

	/**
	 * URL类 演练
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		String str_url = "http://127.0.0.1:8080//16//index.jsp";
		URL url = new URL(str_url);
//		获取对象中的各种协议
		System.out.println("Protocol="+url.getProtocol());
		System.out.println("Host="+url.getHost());
		System.out.println("prot="+url.getPort());
		System.out.println("File="+url.getFile());
		System.out.println("Query="+url.getQuery());
		
		URLConnection urlc = url.openConnection();
		InputStream is = urlc.getInputStream();
		byte[] buf = new byte[1024];
		int len = 0;
		while ((len = is.read(buf)) != -1) {
			System.out.println(new String(buf, 0, len));
		}
		is.close();
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值