黑马程序员_JAVASE_网络编程上

  • 网络模型:
  1. OSI模型
  2. TCP/IP模型

  • 网络通信要素

    ip地址

    端口

    通信协议

  • 通信过程

    1.找到对方IP地址

    2.数据要发送到对方指定的应用程序上,为了标识这些应用程序,用唯一的数字进行标识,这些数字符号就是端口

    3.定义通信规则,tcp还是udp还是其他

  • 应用层协议

    http,ftp,smtp

  • 解析主机地址:

    InetAddress ia = InetAddress.getByName("www.baidu.com");

    String ip = ia.getHostName();

  • TCP和UDP

    1.UDP的特点:

    将数据和源地址和目的地址封装成包,不需要建立连接,

    每个数据包的大小限制在64k

    因为是面向的无连接的形式,所以是一个不可靠的协议(地址不一定就存在,端口不一定打开,若目的不可达,则该包会被丢弃)

    不需要建立连接,速度快(常用作:QQ聊天,凌波,网络视频)

    2.TCP的特点:

    必须要建立连接,形成传输的数据通道

    连接在建立后适合在连接中进行大数据的传输

    连接的建立需要三次握手,是一种可靠的协议(在断开连接后能立即检测出)

    必须要先建立连接,效率会比较低下

  • Socket

    Socket就是为了网络服务提供的一种机制

    通信的两端都是Scoket

    网络通信其实就是Socket之间的通信

    数据在Socket之间的通信

    数据在Scoket间通过IO传输

  • 网络地址:192.168.1.0
  • 广播地址:192.168.1.255
  • TCP传输:

    有服务端:ServerSocket

    有客户端:Socket

    一个服务端可以有多个客户端

    通过Scoket对象的getInputStream和getOutputStream方法可以得到Scoket之间的通信IO流

    package 网络编程.UDP网络编程;
    
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    
    public class UDPRTest {
    
    	/**
    	 * @param args
    	 * @throws Exception
    	 */
    	public static void main(String[] args) throws Exception {
    		//创建UDP服务
    		DatagramSocket ds = new DatagramSocket(10005);//接收方监听的端口号
    		//定义数据格式
    		byte[] buf = new byte[1024];
    		DatagramPacket dp = new DatagramPacket(buf , buf.length);
    		//接收数据
    		while(true){
    		ds.receive(dp);
    
    		String ip = dp.getAddress().getHostAddress();
    		String data = new String(dp.getData(),0,dp.getLength());
    		int port = dp.getPort();
    
    		System.out.println(ip+":"+port+":"+data);
    		}
    
    	}
    
    }
    
    package 网络编程.UDP网络编程;
    
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    public class UDPNetTest {
    
    		public static void main(String[] args) throws Exception{
    			//创建UDP服务
    			DatagramSocket ds = new DatagramSocket(8889);//UDP发送方的端口号
    			//创建要发送的数据
    			byte[] buf = "hello world!".getBytes();
    			DatagramPacket dp = new DatagramPacket(buf , buf.length, InetAddress.getByName("localhost"),10005);//发往对方的地址和对方接收的端口号
    			//发送
    			while(true ){
    				Thread.sleep(1000);
    				ds.send(dp);
    			}
    		}
    }
    
    package 网络编程.多线程和UDP实现聊天功能;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    /**
     * 聊天室:一个线程控制收数据,一个线程控制发数据
     * 因为收和发数据时不一致的,所有要定义两个run方法,所以要定义两个
     * @author Administrator
     *
     */
    public class ChatRoom {
    
    		public static void main(String[] args) throws Exception{
    				DatagramSocket sendDs = new DatagramSocket();
    				DatagramSocket recds = new DatagramSocket(9990);
    
    				Send send = new Send(sendDs);
    				Receiver re = new Receiver(recds);
    
    				new Thread(send).start();
    				new Thread(re).start();
    
    		}
    }
    
    class Send implements Runnable{
    	private DatagramSocket ds;
    	 Send(DatagramSocket ds){
    		this.ds = ds;
    	}
    	public void run() {
    		try {
    			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    			String line = null;
    			while((line = br.readLine())!=null){//while循环,保证此线程在特定情况下不死
    				if("886".equals(line))
    					break;
    				byte[] buff = line.getBytes();
    				DatagramPacket dp =
    						new DatagramPacket(buff, buff.length, InetAddress.getByName("192.168.0.255"), 9990);
    				ds.send(dp);
    			}
    		} catch (Exception e) {
    			throw new RuntimeException("发送端异常");
    		}
    	}
    }
    
    class Receiver implements Runnable{
    	private DatagramSocket ds;
    	 Receiver(DatagramSocket ds){
    		this.ds = ds;
    	}
    	public void run() {
    		try {
    			while(true){//while循环,保证此线程不死
    				byte[] buf = new byte[1024];
    				DatagramPacket dp = new DatagramPacket(buf, buf.length);
    
    				ds.receive(dp);
    
    				String ip = dp.getAddress().getHostAddress();
    				int port = dp.getPort();
    				String data = new String(dp.getData() , 0 , dp.getData().length);
    
    				System.out.println(ip+":"+port+"说:"+data);
    			}
    		} catch (Exception e) {
    			throw new RuntimeException("接收失败");
    		}
    	}
    
    }
时间: 2024-08-11 22:01:48

黑马程序员_JAVASE_网络编程上的相关文章

黑马程序员_Java网络编程

1,IP地址和InetAddress IP地址是互联网上每台计算机都有的自己的标记,IP地址分为5类,A类保留给政府,B类给中等规模的公司,C类给任何需要的人,D类用于组播,E类用于实验. A类  1.0.0.1-126.255.255.254  B类  128.0.0.1-191.255.255.254   C类  192.0.0.1-223.255.255.254  D类 244.0.0.1-239.255.255.254 E类 240.0.0.1-255.255.255.254 在以后开发

黑马程序员__GUI_网络编程

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- GUI 1.事件处理就是处理用户的一个操作这个事件,在事件发生的时候程序应做出什么反应.当事件发生在哪个组件上, 哪个组件就可以说是事件源.给事件源添加一个监听器对象,监听器对象中包含若干事件处理方法.如果事件发生了, 事件处理方法就会自

黑马程序员-Java 网络编程

--Java培训.Android培训.iOS培训..Net培训.期待与您交流!-- 一.概要 学习网络编程需要向对网络模型有一定的了解,主要需要了解的网络模型有OSI参考模型和TCP/IP参考模型,现在TCP/IP模型应用最为广泛,网络编程一般都是针对TCP/IP协议参考模型的编程.但是作为学习时,OSI的学习也是必不可少的,OSI分为七层协议,分别是:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.TCP/IP模型只有四层,分别是:网络访问层.互联网层.传输层和应用层.接下来要学习

黑马程序员------Java网络编程学习总结

Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! 网络模型: OSI参考模型 TCP/IP参考模型 网络参考模型图 网络通讯的要素: IP地址:InetAddress 网络中设备的标识 不容易记忆,可以用主机名 本地回环地址:127.0.0.1:主机名:localhost 端口号 用于标识进程的逻辑地址,不同进程的标识 有效端口:0~65535,其中0~1024为系统使用端口或保留端口 网络协议  是一种网络通讯的规则  常见协议:TCP,UDP UDP: 1

黑马程序员_网络编程

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地址对象的类,没有构造方法 InetAd

黑马程序员 ---------- Java网络技术之 ---正则表达式 (Day06)

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 正则表达式 正则表达式:基本知识 1  字符,   2 字符类 , 3 预定义字符类 , 4 边界匹配器 ,5 Greedy 数量词,6 Logical 运算符 详解: 1 字符 x   字符 x \\ 反斜线字符 \0n 带有八进制值 0 的字符 n (0 <= n <= 7) \0nn 带有八进制值 0 的字符 nn (0 <= n

黑马程序员——Java网络编程之UDP传输

网络编程 网络模型 通讯要素:InetAddress(对象):ip地址,网络中设备的标识,不可记忆,可用主机名,本地回环地址:127.0.0.1主机名localhost 端口号 传输协议:UDP,将数据的源及目的封装成数据包中,不需要建立连接,每个数据包的大小限制在64K内,无连接,是不可靠协议,不需要建立连接,速度快.力求速度,不求数据的准确性.比如聊天软件,网络会议. TCP:建立连接,形成传输数据的通道,在连接中进行大数据量传输,通过三次握手完成连接,是可靠协议,必须建立连接效率稍低. S

黑马程序员——Java基础---io(上)

黑马程序员——Java基础---io(上) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java I/O系统负责处理程序的输入和输出,I/O类库位于java.io包中,它对各种常见的输入流和输出流进行了抽象.如果数据流中最小的数据单元是字节,那么称这种流为字节流:如果数据流

黑马程序员-Java面向对象编程学习总结

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- Java面向对象编程学习总结: 重要知识点总结如下: 1,抽象,封装,继承,多态是面向对象程序设计中得四个特点. 2,面向对象得软件开发大体分为:面向对象的分析,面向对象的设计,面向对象的实现. 可概括为如下过程:分析用户需求,从问题中抽