`
想学跑的猪
  • 浏览: 15322 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员_网络编程

阅读更多

 

 ------- android培训java培训、java基础学习技术总结、期待与您交流! ----------

 

网络程序
     1.找到对方Ip
     2.数据要发送到对方指定的应用程序上,为了标识这些应用程序,所以给
     这些网络应用程序都用数字进行标识。
     为了方便称呼这个数字,叫做端口,逻辑端口
     3.定义通信规则,这个通讯规则成为协议。
     轨迹组织定义了通用协议Tcp/Ip.
    
     网络模型:按层次对网络进行细致化的划分
     OSI参考模型  ,TCP参考模型
     1.OSI:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
     2.TCP/Ip:应用层,传输层,网际层,主机至网络层
      主机对网络数据的处理:本地主机进行逐层封包,目的进行逐层拆包
     Ip地址:网络中的设备标识,不易理解;可用主机名
     本地回环地址:127.0.0.1  主机名:localhost
      Tcp与Udp
     Udp
     将数据及源和目的封装数据包中,不需要建立连接
     每个数据包的大小限制在64K内
     因无连接,是不可靠协议,容易丢包
     不需要建立连接,速度快
     udp:qq聊天,视频聊天,视频会议,下载。
     Tcp
     建立连接,形成传输数据的通道
     在连接中进行大数据传输
     通过三次握手完成连接,是可靠协议
     必须建立连接,效率会稍低
     Socket
     Socket就是为网络服务提供的一种机制
     通信的两端都有Socket
      网络通信其实就是Socket间通信
      数据在两个Socket间通过IO传输。

获取Ip信息示例如下:

import java.net.InetAddress;
import java.net.UnknownHostException;

public class IpDemo {
	public static void main(String[] args) throws UnknownHostException {
        InetAddress[] inet=InetAddress.getAllByName("www.baidu.com"); 
        System.out.println(inet.toString());
        System.out.println(inet[0]);
        for(int i=0;i<inet.length;i++)
        {
        	System.out.println(inet[i].getHostAddress());
        	System.out.println(inet[i].getHostName());       	
        }
       // System.out.println("address:"+inet.getHostAddress());
        //System.out.println("name:"+inet.getHostName()); //如果没有解析成功,主机名还是Ip地址。
	} 
}

 UdpSend类:用于信息的发送.

通过Udp传输方式,将一段文字数据发送出去
      思路:
      1.建立UdpSocket服务
      2.提供数据,并将数据封装到数据包
      3.通过Socket服务的发送功能,将数据包发出去
      4.关闭资源

public class UdpSend {
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
        DatagramSocket ds=new DatagramSocket();
        BufferedReader bufr=
        	new BufferedReader(new InputStreamReader(System.in));
        String line=null;
        while((line=bufr.readLine())!=null){
        	if("886".equals(line))
        		break;
        byte[] buf=line.getBytes(); 
        DatagramPacket dp=
        	new DatagramPacket(buf, buf.length,InetAddress.getByName("127.0.0.1"),10000);
        ds.send(dp);
        }
        ds.close();    
	}
}

 UdpRecv,用于信息的接收:

需求:
 * 定义udpsocket服务,通常会监听一个端口。其实就是给这个接收网络应用程序定义数字标识
 *     方便于明确哪些数据过来该应用程序可以处理。
 * 1.定义一个应用程序,用于读取Udp协议传输的数据并处理,
 * 2.定义一个数据包,因为要存储接收到的字节数据。
 * 因为数据包对象中有更多的功能可以提取字节数据存入已定义好的数据包中。
 * 3.通过socket服务的receive方法可以将收到的数据存入已定义好的数据包中。
 * 4.通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台上。
 * 5.关闭资源。

class UdpRecv{
	public static void main(String[] args) throws IOException{
		DatagramSocket ds=new DatagramSocket(10000);
		while(true){
		byte[] buf=new byte[1024];
		DatagramPacket dp=new DatagramPacket(buf,0,buf.length);
		ds.receive(dp);
		String ip=dp.getAddress().getHostAddress();
		String data=new String(dp.getData(),0,dp.getLength());
		System.out.println(ip+"::"+data); 
		/*System.out.println("Address:"+dp.getAddress().getHostAddress());
		System.out.println("port:"+dp.getPort());
		System.out.println("url:"+dp.getSocketAddress()); */ 
		}
	}
}

 在一个窗口中同时发送和接收,代码示例如下:

class Send implements Runnable{
	DatagramSocket ds;
	Send(DatagramSocket ds){
		this.ds=ds;
	}
	public void run()
	{
		try{
		        BufferedReader bufr=
		        	new BufferedReader(new InputStreamReader(System.in));
		        String line=null;
		        while((line=bufr.readLine())!=null){
		        	if("886".equals(line))
		        		break;
		        byte[] buf=line.getBytes(); 
		        DatagramPacket dp=
		        	new DatagramPacket(buf, buf.length,InetAddress.getByName("127.0.0.1"),10004);
		        ds.send(dp);
		        }
		        ds.close();    
			
		}catch(IOException e){
			e.printStackTrace();			
		}	
	}
}
class Recv implements Runnable{
	DatagramSocket ds;
	Recv(DatagramSocket ds){
		this.ds=ds;
	}
	public void run() {
		try {
			while(true){
		byte[] buf=new byte[1024];
		DatagramPacket dp=new DatagramPacket(buf,0,buf.length);
			ds.receive(dp);
		String ip=dp.getAddress().getHostAddress();
		String data=new String(dp.getData(),0,dp.getLength());
		System.out.println(ip+"::"+data);		
	}
		} catch (IOException e) {
			e.printStackTrace();
		}	
}
}
public class IpDemo2 {
	public static void main(String[] args) throws SocketException {
      DatagramSocket sendSocket=new DatagramSocket();
      DatagramSocket recvSocket=new DatagramSocket(10004);
      new Thread(new Recv(recvSocket)).start();
      new Thread(new Send(sendSocket)).start();
	}
}

 

 ------- android培训java培训、java基础学习技术总结、期待与您交流! ----------

分享到:
评论

相关推荐

    01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip

    【标题】"01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip" 提供的是一门由黑马程序员机构推出的Java基础强化课程,由讲师张孝祥主讲,旨在深入讲解Java编程的基础知识并进行能力提升。 【描述】中提到...

    黑马程序员_Java基础辅导班教程课件[第01期]第13天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第13天"中,我们聚焦于Java编程语言的基础知识,这是一门面向初学者的课程,旨在帮助学员快速掌握Java开发的基本技能。第13天的课程通常会涵盖上一天(第12天)所学...

    黑马程序员_毕向东_Java基础视频教程第22天-06-GUI(Action事件).zip

    在本视频教程“黑马程序员_毕向东_Java基础视频教程第22天-06-GUI(Action事件)”中,讲师毕向东深入讲解了Java GUI中的Action事件处理机制,这是构建用户友好界面的关键部分。 首先,我们要理解什么是GUI。GUI,...

    黑马程序员_从零开始征服Android之旅(第二季)源码和笔记(上)

    网络编程是现代应用必不可少的部分,Android提供了HttpURLConnection、OkHttp等网络库进行HTTP请求。此外,还有异步处理模型如AsyncTask和Handler/Looper,用于在后台执行耗时操作,避免阻塞主线程。 除此之外,你...

    黑马程序员_毕向东_Java基础源码.rar

    这个名为“黑马程序员_毕向东_Java基础源码.rar”的压缩包文件,包含了丰富的Java基础源代码实例,对于初学者来说,是深入了解Java编程的良好资源。 一、Java基本语法 Java语言以其严格的类型检查和面向对象特性...

    黑马程序员_毕向东_Java基础视频教程第18天-12-IO流(文本文件读取练习).zip

    在这个“黑马程序员_毕向东_Java基础视频教程第18天-12-IO流(文本文件读取练习)”中,毕向东老师将深入讲解如何使用Java IO流来读取文本文件。Java IO流提供了多种类和方法,使得开发者可以灵活高效地处理输入和输出...

    黑马程序员_2小时教你写一个安卓程序[第01天]课件源码

    在本课程中,“黑马程序员”将引导我们快速入门安卓应用程序的开发,这是一段为期两天的密集学习旅程,第01天的课程主要侧重于基础知识的建立和首个安卓程序的编写。通过这次学习,我们将了解到安卓开发环境的搭建、...

    黑马程序员_2小时教你写一个android程序[第05天]课件源码

    在本课程中,“黑马程序员”将引导我们逐步学习如何在短短两小时内编写一个Android应用程序。这个教程特别关注的是第5天的内容,主要涉及到天气预报应用的开发,包括数据获取、数据显示以及网络图片的查看功能。下面...

    黑马程序员_毕向东最新经典Java基础视频

    - **简单的网页爬虫**:运用多线程技术并结合网络编程知识,实现网页数据的抓取和解析。 ### 学习资源推荐 - **官方文档**:Oracle官网提供了详尽的Java SE教程和API文档。 - **在线课程**:如黑马程序员提供的...

    黑马程序员_Java基础辅导班教程课件[第01期]第10天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第10天"中,我们聚焦于Java编程语言的基础知识,这是一门面向初学者的课程,旨在帮助学员快速掌握Java的核心概念。通过这个阶段的学习,学员将能够理解并运用Java的...

    黑马程序员_2小时教你写一个安卓程序[第02天]课件源码

    在本课程"黑马程序员_2小时教你写一个安卓程序[第02天]"中,我们将深入探讨Android应用程序开发的基础知识,特别关注QQ登陆、读取用户短信以及短信的还原这三大核心主题。以下是对这些知识点的详细说明: 一、QQ...

    黑马程序员_毕向东_Java基础视频教程第18天-11-IO流(文本文件读取方式二).zip

    10. **学习资源**:“黑马程序员”是一个知名的在线教育平台,提供丰富的编程课程,如本例中的Java基础视频教程。毕向东老师的讲解深入浅出,适合初学者和有一定基础的学习者。 通过这个教程,学习者将掌握使用`...

    黑马程序员-Java语言进阶-源码、教程笔记.zip

    day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 ...day11_网络编程 day12_函数式接口 day13_Stream流、方法引用 Java基础小节练习题答案

    黑马程序员测试题部分答案

    【标题】:“黑马程序员测试题部分答案”涵盖了在学习编程过程中可能会遇到的各类测试题目及其解答,主要由“黑马程序员”这个知名的IT教育机构的教学资源衍生而来。这些测试题目的答案,旨在帮助学习者检验自己的...

    B站黑马程序员Python教程学习笔记.zip

    5. **网络编程**:学习如何使用socket库进行网络通信,实现客户端和服务器程序。 6. **并发编程**:了解线程(threading模块)和进程(multiprocessing模块)的概念,以及如何在Python中实现并发。 7. **装饰器**...

    传智播客&黑马程序员PYTHON教程课件汇总

    含书签,可检索 01_Python基础 02_linux基础 03_python高级 ...06_网络编程 07_正则表达式课件 08_数据结构和算法 09_MySQL 10_mongo 11_redis 12_前端 13_django 14_爬虫 15_tornado 16_shell 17_微信公众号

    黑马程序员-Qt讲义.pdf

    Socket通信是网络编程中不可或缺的技术,Qt支持基于TCP/IP协议的客户端和服务器端编程,以及UDP通信和组播技术。 多线程是现代应用程序中用来提高性能的重要技术。Qt提供了多线程编程的支持,包括线程的基本概念...

    黑马程序员2018python爬虫课件完整版

    黑马程序员作为知名的IT教育机构,其2018年的Python爬虫课程旨在教授学员如何有效地抓取和处理网络上的信息。在这个完整的课程中,你将深入理解Python爬虫的基本原理,并学习到一系列实用的技巧。 首先,Python之...

    黑马程序员入学测试题

    【标题】:“黑马程序员入学测试题”是一份用于评估编程基础和理解能力的测试集,主要针对准备加入黑马程序员培训课程的学生。这份测试题旨在帮助新手程序员检验自己的知识水平,以便更好地适应学习环境。 【描述】...

Global site tag (gtag.js) - Google Analytics