网络编程简单学习

  1. 什么是网络:网络是信息传输、接收、共享的虚拟平台,它用物理链路将各个孤立的工作站或主机相连在一起,组成数据链路,从而达到资源共享和通信的目的。网络会借助文字阅读、图片查看、影音播放、下载传输、游戏聊天等软件工具从文字、图片、声音、视频,等方面给用户提供服务,具有多点性、连结性、交互性和快速性等特点。(来自搜狗百科)。

  2. OSI七层模型:(搜狗百科OSI七层模型

    1. 第一层:物理层(使用物理连接媒介,提供物理连接,使用比特流传输)
    2. 第二层:数据链路层(控制网络层和物理层之间的通信,它的主要功能是如何在不可靠的物理线路上进行数据的可靠传递。为了保证传输,从网络层接收到的数据被分割成特定的可被物理层传输的。帧是用来移动数据的结构包,它不仅包括原始数据,还包括发送方和接收方的网络地址以及纠错和控制信息。
    3. 第三层:网络层(将网络地址翻译成对应的物理地址,并决定如何将数据从发送方路由到接收方。
    4. 第四层:传输层(实现网络上不同主机之间的通信,TCP及UDP都是该层的传输协议
    5. 第五层:会话层( 负责在网络中的两节点之间建立和维持通信。功能包括:建立通信链接,保持会话过程通信链接的畅通,同步两个节点之间的对 话,决定通信是否被中断以及通信中断时决定从何处重新发送。
    6. 第六层:表示层(应用程序和网络的翻译官,数据将按照网络能理解的方案进行格式化;这种格式化也因所使用网络的类型不同而不同。
    7. 第七层:应用层( 负责对软件提供接口以使程序能使用网络服务
  3. IP:IP是英文Internet Protocol的缩写,意思是“网络之间互联的协议”,也就是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。(来自搜狗百科);IP地址:IP地址(英语:Internet Protocol Address)是一种在Internet上的给主机编址的方式,也称为网际协议地址。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。(用来唯一标识网络终端)。

  4. 端口:计算机"端口"是英文port的意译,可以认为是计算机与外界通讯交流的出口。(每一个应用程序的端口号不能重复用来识别某个终端中运行的一个应用;每一个IP中可以同时使用65535个端口;)。

  5. TCP协议:传输控制协议(Transmission Control Protocol),是一种基于连接的传输层协议,安全可靠。通信双方都有双向字节流,通过字节流的方式进行通讯。(类似于打电话)

  6. UDP协议:用户数据报协议(User Datagram Protocol),是一种无连接的传输层协议,不可靠,但是速度快,传输效率高。通过传输数据包的方式进行通讯。

  7. InetAddress类:表示IP地址

    1. InetAddress.getByName():根据字符串获得一个IP地址
    2. InetAddress.getLocalHost():获得本机的IP地址
  8. TCP协议的常用类
    ServerSocket:服务器端的套接字
    Socket:套接字
    TCP程序开发的步骤
    服务端创建一个ServerSocket,并接受客户端的连接请求;
    accept();
    客户端发送连接请求 new Socket();
    服务端接收到客户端的连接请求,并返回一个与之对应的Socket;
    getInputStream();
    getOutputStream();
  9. 练习
    import java.io.PrintWriter;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.util.Scanner;
    
    public class Celient {
    
    	public static void main(String[] args) throws Exception, Exception {
    		
    		Scanner s=new Scanner(System.in);
    		//创建一个客户端,端口为0325
    		Socket socket=new Socket(InetAddress.getLocalHost(),0325);
    		//获得一个文本输出流
    		PrintWriter p=new PrintWriter(socket.getOutputStream());
    		String str=null;
    		do {
    			System.out.println("你说:");
    			str=s.nextLine();
    			//输出文本内容
    			p.println(str);
    			//刷新
    			p.flush();
    		}while(!str.equals("exit")) ;
    		
    		//关闭资源
    		s.close();
    		socket.close();
    	}
    
    }
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.Reader;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Server {
    
    	public static void main(String[] args) throws Exception {
    		//创建一个服务器ServerSocket,端口0325
    		ServerSocket server=new ServerSocket(0325);
    		System.out.println("等待连接.....");
    		// 侦听并接受到此套接字的连接。
    		Socket s=server.accept();
    		//将字节转换成字符
    		Reader reader=new InputStreamReader(s.getInputStream());
    		BufferedReader bf=new BufferedReader(reader);
    		
    		String str=null;
    		while(!(str=bf.readLine()).equals("exit")) {
    			System.out.println("对方正在说:"+str);
    		}
    		
    		System.out.println("数据接收完毕");
    		server.close();
    	}
    
    }

  10. UDP程序开发
    没有明确的客户端和服务端,任何一方都可以作为服务端和客户端;
    UDP的套接字是DatagramSocket,创建这个套接字,它可以用来接收DatagramPacket和发送DatagramPacket;
  11. import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    /**
     * UDP模拟接收数据
     *
     */
    public class Reciver {
    
    	public static void main(String[] args) throws Exception {
    		//每次接收的数据最大长度
    		byte[] b=new byte[1024];
    		//创建DatagramSocket,端口为220
    		DatagramSocket ds=new DatagramSocket(220);
    		//创建数据包
    		DatagramPacket dp=new DatagramPacket(b,b.length);
    		System.out.println("准备接收......");
    		//接收数据
    		ds.receive(dp);
    
    		//输出数据内容
    		System.out.println("长度:"+dp.getLength());
    		System.out.println("端口:"+dp.getPort());
    		System.out.println(b.length);
    		//将实际数据长度的内容转换为字符串
    		System.out.println(new String(b,0,dp.getLength()));
    		//关闭资源
    		ds.close();
    
    	}
    
    }
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    /**
     * UDP协议测试发送数据
     *
     */
    public class Sender {
    
    	public static void main(String[] args) throws Exception {
    	
    		//要发送的数据
    		String str="你好啊骚年!";
    		//创建一个DatagramSocket,端口为325
    		DatagramSocket ds=new DatagramSocket(325);
    		//将要发送的数据转换为数据包,包含的信息有数据内容,字符串长度,发送给的IP地址,以及程序的端口
    		DatagramPacket dp=new DatagramPacket(str.getBytes(),str.getBytes().length,InetAddress.getLocalHost(),220);
    		System.out.println("准备发送......");
    		//发送数据
    		ds.send(dp);
    		System.out.println("对方已经成功接收");
    		//关闭资源
    		ds.close();
    	}
    
    }
    测试结果:

    准备接收......
    长度:12
    端口:325
    1024
    你好啊骚年!
  12. URL类:统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class Url {

	public static void main(String[] args) throws MalformedURLException {
		
		//创建URL实例
		URL  url=new URL("http://www.163.com");
		try {
			//打开url的连接
			URLConnection urlc=url.openConnection();
			//获得字符缓冲流
			BufferedReader br=new BufferedReader(new InputStreamReader(urlc.getInputStream()));
			String str=null;
			//读取内容
			while((str=br.readLine())!=null) {
				System.out.println(str);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值