黑马程序员--学习笔记--网络编程

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

UDP协议和TCP协议

        UDP协议:面向无连接,数据封包,体积小,64K/个,不可靠,速度快。例子:聊天软件,视频会议,桌面共享。

        TCP协议:TCP协议:必须面向连接(确认对方在不在),在连接中进行大数据量传输,通过三次握手完成连接,是可靠协议,必须建立连接,效率会 降低。

        IP可以叫IP协议,也可以叫IP地址,在这里我们主要讲关于如何获得IP地址。IP 地址是 IP 使用的 32 位或 128 位无符号数字,它是一种低级协议,UDP 和 TCP 协议都是在它的基础上构建的。InetAddress是java中表示互联网协议地址的类,InetAddress 的实例包含 IP 地址,还可能包含相应的主机名。以下是代码实例:

//返回本地主机的IP地址
		InetAddress i = InetAddress.getLocalHost();
		System.out.println(i.toString());
		//返回字符串格式的原始IP地址
		System.out.println("address:"+i.getHostAddress());
		//获取此 IP 地址的主机名
		System.out.println("name:"+i.getHostName());
		
		//在给定主机名的情况下确定主机的 IP 地址。
		//主机名可以是机器名(如 "www.baidu.com"),也可以是其 IP 地址的文本表示形式。
		InetAddress ia = InetAddress.getByName("www.baidu.com");
		System.out.println("address:"+ia.getHostAddress());
		System.out.println("name:"+ia.getHostName());

端口

        客户端想要与服务器沟通除了要使用共同点协议,还要一个指定一个专用的开口,这个开口就成为端口。并被规定是一个在0~65535之间的整数。

套接字

        套接字(Socket)是用来接收或传送分组的一个端点。套接字是客户端和服务端与端口连接的桥梁。利用socket进行通信的程序叫socket通信。

TCP编程

        TCP编程过程中服务器端与客户端交互过程如下:
(1)服务器程序创建一个ServerSocket(服务器套接字),调用accept()方法等待客户机来连接。
(2)客户端程序创建一个Socket,请求与服务器建立连接。
(3)服务器接收客户机的连接请求,同时创建一个新的Socket与客户端连接。服务器继续等待新的请求。
        TCP编程的常用类有InetAddress类、ServerSocket类和Socket类。在Socket类中getInputStream()和getOutputStream()方法经常用于实际通信中。以下是TCP编程实现客户端和服务器端数据的交流代码示例:
		//客户端程序
		//创建客户端的socket服务。指定目的主机和端口
		Socket s = new Socket("192.168.1.101", 10003);
		
		//为了发送数据,应该获取socket流中的输出流
		OutputStream out = s.getOutputStream();
		//写入数据
		out.write("wowowow lai l".getBytes());
		//关闭客户端
		s.close();
//服务端程序
		//建立服务端socket服务。并监听一个端口。
		ServerSocket ss = new ServerSocket(10003);
		
		//通过accept方法获取连接过来的客服端对象。
		Socket s = ss.accept();
		String ip = s.getInetAddress().getHostAddress();
		System.out.println(ip+"...is connected.");
		
		//获取客服端发送过来的数据,那么要使用的客服端对象的读取流来读取数据
		InputStream in = s.getInputStream();
		byte[] buf = new byte[1024];
		int len = in.read(buf);
		System.out.println(new String(buf, 0, len));
		//关闭客户端,服务端
		s.close();
		ss.close();

        TCP编程中还可以通过URL类来访问网站中的资源。通过创建URL对象,并与该对象进行远程连接,再获得相应的输入输出流,最后获得网站中的 资源。如下所示:

//创建一个URL对象,访问的是本地Tomcat服务器中的web网页demo
		URL url = new URL("http://192.168.1.101:8080/myweb/demo.html");
		//建立与URL对象的远程连接
		URLConnection conn = url.openConnection();
		//System.out.println(conn);
		//返回从此打开的连接读取的输入流
		InputStream in = conn.getInputStream();
		
		byte[] buf = new byte[1024];
		int len = 0;
		while((in.read(buf))!=-1){
			System.out.println(new String(buf,0,len));
		}

UDP编程

        UDP协议提供数据包的形式,将数据打包称为数据包,然后发送到目的地;接收别人发来的数据包,然后查看数据包。下面是UDP程序的步骤。
        发送数据包执行顺序
(1)使用DatagramSocket()创建一个数据包套接字。
(2)使用DatagramPacket(byte[] buf, int offset, int length, InetAddress address,int port)创建要发送的数据包。
(3)使用DatagramSocket类的send()方法,发送数据包。
        接收数据包执行顺序
(1)使用DatagramSocket(int port)创建数据包套接字,绑定到指定的端口。
(2)使用DatagramPacket(byte[] buf, int length)创建字节数组,接收数据包。
(3)使用DatagramPacket类的receive()方法,接收UDP包。UDP编程的常用类有程序套接字DatagramSocket类和数据包类DatagramPacket类。DatagramPacket负责UDP的数据传送。以下是UDP编程实现的实例代码:

//数据包接收端
		//1.创建udp,socket,建立端点
		DatagramSocket ds = new DatagramSocket(10000);
		
		//2.定义数据包。用于存储数据。
		byte[] buf = new byte[1024];
		DatagramPacket dp = new DatagramPacket(buf, buf.length);
		
		//3.通过服务的receive方法将接收到的数据存入数据包中。阻塞式方法,没数据就一直等
		ds.receive(dp);
		
		//4.通过数据包的方法获取其中的数据。IP、数据、端口号
		String ip = dp.getAddress().getHostAddress();
		String data = new String(dp.getData(),0,dp.getLength());
		int port = dp.getPort();
		
		System.out.println(ip+"::"+data+"::"+port);
		//5.关闭资源
		ds.close();
// 数据包发送端
		//1.创建udp服务,通过DatagramSocket对象。(可以给发送方设置一个端口号)
		DatagramSocket ds = new DatagramSocket(8888);
		//2.确定数据,并封装成数据包。DatagramPacket(Byte[] byte,int length,InetAddress address,int port);
		byte[] buf = "天生我材必有用".getBytes();
		DatagramPacket dp = 
				new DatagramPacket(buf,buf.length, InetAddress.getByName("192.168.1.101"), 10000);
		//3.通过socket服务,将已有的数据包发送出去。通过send方法
		ds.send(dp);
		//4.关闭资源
		ds.close();

总结

      以上就是网络编程的基本概念,了解这些技术可以方便我们在下一步的JavaWeb编程中的学习,并且帮助我们了解了网络中聊天器、上传文件等流程的工作原理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值