黑马程序员_Java网络编程

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a&amp;gt;、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! --------------------

一、网络参考模型

OSI参考模型,共七层,应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

TCP/IP参考模型,共四层,应用层、传输层、网际层、主机至网络层

实际运用中各个层次所对应的协议:

应用层协议:http协议,ftp协议
传输层协议:TCP/UDP协议
网际层协议:IP协议

二、通讯要素:

(1)IP地址:连接到网络中的每台计算机的身份证,唯一标识。
(2)端口:用于标识进程的逻辑地址,不同进程的标识。有效端口:0-65535,系统系统或保留端口为:0-1024
(3)通许协议:各个计算机间相互进行通信时的数据传输格式,或者说传输规则。

三、TCP协议和UDP协议的特点

1.UDP特点

(1)将数据及源和目的封装成数据包中,不需要建立连接
(2)每个数据报道的大小在限制在64k内
(3)因无连接,是不可靠协议
(4)不需要建立连接,速度快

2.TCP特点

(1)建立连接,形成传输数据的通道。
(2)在连接中进行大数据量传输
(3)通过三次握手完成连接,是可靠协议
(4)必须建立连接,效率会稍低

四、UDP和TCP编程实例

1.UDP实例,分为发送端和接收端

发送端代码:

package com.demo.socket;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
 * 需求:通过udp传输方式,将一段文字数据发送出去。
 * 
 * 定义UDP的发送端
 * 思路:
 * 1.建立udpsocket服务。
 * 2.提供数据,并将数据封装到数据包中。
 * 3.通过socket服务的发送功能,将数据包发出去。
 * 4.关闭资源。
 * @author superadmin
 *
 */
public class UdpSend {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		
		//1.创建udp服务,通过DatagramSocket对象
		DatagramSocket ds=new DatagramSocket();
		
		//2.确定数据,并封装成数据包。DatagramPacket(byte[] bytes,int length,InetAddress address,int port)
		byte[] buf="udp ge men lai le ".getBytes();
		DatagramPacket dp=new DatagramPacket(buf, buf.length,InetAddress.getByName("127.0.0.1"),10000);
		
		//3.通过socket服务,将已有的数据包发送出去。通过send方法。
		ds.send(dp);
		
		//4.关闭资源
		ds.close();
	}

}
接收端代码:

package com.demo.socket;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

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

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub

		//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.通过数据包的方法获取其中的数据。
		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();
	}

}

2.TCP编程实例

TCP编程分为客户端和服务端对应的类分别为:java.net.Socket和java.net.ServerSocket

客户端实例代码:

package com.demo.socket;

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

/**
 * 需求:给服务端发送一个文本数据。
 * 定义客户端
 */
public class TcpClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		//创建连接并定义要发送的主机名和端口
		Socket s=new Socket("127.0.0.1",10003);
		//获取输出流并定义要传输数据的内容
		OutputStream out=s.getOutputStream();
		out.write("tcp ge men lai le".getBytes());
		//关闭连接
		s.close();
	}

}
服务端实例代码:

package com.demo.socket;

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服务端
 * 
 * 需求:定义端点接收数据并打印在控制台上。
 * 
 * 1.建立服务端的socket服务。并监听端口。
 * 2.获取连接过来的客户端对象。通过accept方法完成。
 * 3.客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据
 * 并打印到控制台
 * 4.关闭服务端(可选)。
 * 
 */
public class TcpServer {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		ServerSocket ss=new ServerSocket(10003);
		Socket s=ss.accept();//阻塞式方法
		
		String ip=s.getInetAddress().getHostAddress();
		System.out.println(ip+"......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();
	}

}

五、比较重要的类

1.URL类(java.net.URL),统一资源定位符对象

代码实例:

package com.demo.socket;

import java.net.URL;

public class URLDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		URL url=new URL("http://192.168.1.254:8080/myweb/demo.html?name=haha&age=30");
		
		System.out.println(url.getProtocol());//协议
		System.out.println(url.getHost());//主机IP地址
		System.out.println(url.getPort());//端口号
		System.out.println(url.getPath());//网络绝对路径
		System.out.println(url.getFile());//网络绝对路径+?+参数
		System.out.println(url.getQuery());//参数
		

	}

}

2.URLConnection类(java.net.URLConnection)

这个类可以理解为将客户端和服务端建立的连接封装成了对象

代码实例:

package com.demo.socket;

import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

public class URLConnectionDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		URL url=new URL("http://192.168.1.254:8080/myweb/demo.html?name=haha&age=30");
		
		/**
		 * 带着协议在应用层操作
		 */
		URLConnection conn=url.openConnection();//打开连接
		System.out.println(conn);
		
		InputStream in=conn.getInputStream();
		
		byte[] buf=new byte[1024];
		int len=in.read(buf);
		System.out.println(new String(buf,0,len));
	}

}


---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a&amp;gt;、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
详细请查看:<a href="http://www.itheima.com" target="blank">
www.itheima.com</a>


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值