黑马程序员 Java基础--网络编程

 

----------android培训java培训java学习型技术博客、期待与您交流!------------


在此,分享一下自己学习JAVA的学习心得。有不对的地方请帮忙改正,也希望对想java的同学有帮助!


JAVA基础

--网络编程


 网络基本知识:


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

2)TCP/IP参考模型
应用层、传输层、网际层、主机至网络层


网络通讯要素 :


 IP地址:用于标记一台计算机的身份证。IP地址由网络地址(确定网络)和主机地址(网络中的主机)组成。

 本地回环地址:127.0.0.1  主机名:localhost 。


 端口号 :用于标识进程的逻辑地址,不同进程的标识 。

 有效端口:0~65535,其中0~1024系统使用或保留端口。 

常用端口:

1) web服务端口:80

2) tomcat服务器端口:8080


传输协议:通讯的规则 

常见协议:TCP,UDP


            网络通信的两种协议:


在Java中网络程序有两种协议:TCP和UDP,TCP通过握手协议进行可靠的连接


UDP:

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

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


Socket:


1)Socket就是为网络服务提供的一种机制。


2)通信的两端都有Socket。


3)网络通信其实就是Socket。


4)数据在两个Socket间通过IO传输。

 

     UDP传输步骤:


1,建立updsocket服务。
2,提供数据,并将数据封装到数据包中。
3,通过socket服务的发送功能,将数据包发出去。
4,关闭资源。


Java练习代码:

练习:通过键盘录入获取要发送的信息

class  UdpSend2
{
	public static void main(String[] args) throws Exception
	{
		//1,创建udp socket,建立端点。
		DatagramSocket ds = new DatagramSocket();
		// 通过带缓冲区的字符流实现键盘录入
		BufferedReader bufr = 
			new BufferedReader(new InputStreamReader(System.in));
        //初始化line为null
		String line = null;
		//循环读取键盘录入的内容
		while((line=bufr.readLine())!=null)
		{ 
			//定义一个标记,退出循环
			if("886".equals(line))
				break;
            //2,定义数据包。用于存储数据。
			byte[] buf = line.getBytes();,            
			DatagramPacket dp = 
				new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10001);
			// 3,通过socket服务,将已有的数据包发送出去。通过send方法。
			ds.send(dp);
		}
		ds.close();//4,关闭资源
	}
}
class  UdpRece2
{
	public static void main(String[] args) throws Exception
	{
		// 1,创建udp socket,建立端点。
		DatagramSocket ds = new DatagramSocket(10001);

		while(true)
		{
			//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());
			System.out.println(ip+"::"+data);
		}
	}
}


TCP传输方式:

 

服务端:


1,建立服务端的socket服务。ServerSocket();并监听一个端口。


2,获取连接过来的客户端对象。通过ServerSokcet的 accept方法。没有连接就会等,所以这个方法阻塞式的。


3,客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。并打印在控制台。


4,关闭服务端。(可选)


Java练习代码:

练习:TCP传输

class  TransClient
{
	public static void main(String[] args) throws Exception
	{
		Socket s = new Socket("192.168.1.254",10005);
		//定义读取键盘数据的流对象。
		BufferedReader bufr = 
			new BufferedReader(new InputStreamReader(System.in));
		//定义目的,将数据写入到socket输出流。发给服务端。
		//BufferedWriter bufOut = 
		     //new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
		//使用PrintWriter将数据发送给服务端。
		PrintWriter out = new PrintWriter(s.getOutputStream(),true);
		//定义一个socket读取流,读取服务端返回的大写信息。
		BufferedReader bufIn = 
			new BufferedReader(new InputStreamReader(s.getInputStream()));
		String line = null;		
		while((line=bufr.readLine())!=null)
		{
			if("over".equals(line))
				break;			
			out.println(line);//通过PrintWriter方法实现发送
			/*
			//通过BufferedWriter方法实现发送
 			bufOut.write(line);
 			bufOut.newLine();
 			bufOut.flush();
            */
			String str =bufIn.readLine();
			System.out.println("server:"+str);		
		}
		//关闭资源
		bufr.close();
		s.close();
	}
}

class  TransServer
{
	public static void main(String[] args) throws Exception
	{
		ServerSocket ss = new ServerSocket(10005);
		// 建立服务端socket服务。并监听一个端口。
		Socket s = ss.accept();
		String ip = s.getInetAddress().getHostAddress();
		System.out.println(ip+"....connected");

		//读取socket读取流中的数据。
		BufferedReader bufIn =
			new BufferedReader(new InputStreamReader(s.getInputStream()));

		//目的。socket输出流。将大写数据写入到socket输出流,并发送给客户端。
		//BufferedWriter bufOut = 
			//new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

		PrintWriter out = new PrintWriter(s.getOutputStream(),true);
		String line = null;
		while((line=bufIn.readLine())!=null)
		{
			System.out.println(line);
			//通过PrintWriter方法实现发送
			out.println(line.toUpperCase());
			/*
			//通过BufferedWriter方法实现发送
 			bufOut.write(line.toUpperCase());
 			bufOut.newLine();
 			bufOut.flush();
			*/
		}
		//关闭资源
		s.close();
		ss.close();
	}
}

URL和URI:

URI:统一资源标识符,用于标识一个web资源,包含了两个部分。

URL:统一资源定位符,能够精确的定位数据的URI。

URN:统一资源名称,除了URL的URI。

在java中URI和URL是分开的两个类,URI类专门用于解析,URL用于通信。


 1) String getFile() :获取此 URL 的文件名。 
       2)String getHost() :获取此 URL 的主机名(如果适用)。 
      3) String getPath() : 获取此 URL 的路径部分。 
      4) int getPort() :获取此 URL 的端口号。 
      5) String getProtocol() : 获取此 URL 的协议名称。 
      6) String getQuery() :获取此 URL 的查询部 



知识点:网络架构:

   C/S:Client/Server
客户端,服务端。
特点:
1,需要在客户端和服务端都需要按照编写的软件。
2,维护较麻烦。
好处:可以减轻服务端的压力,如网络游戏。

B/S:Browser/Server
浏览器 ,服务端。
1,客户端不用单独编写软件。因为客户端用的就是浏览器。
2,对于软件升级,只要考虑服务端即可。
弊端:所有的程序都运行在服务端,客户端的浏览器毕竟解析能力较弱。对游戏等。


















































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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值