黑马程序员——Java网络编程-整理笔记

原创 2015年07月06日 17:21:42

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



网络编程概念:网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。

网络通信的步骤

                 ①找到对方的IP地址;

                 ②数据要发到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序都用数字进行了标识。为了方便称呼这个数字,叫做端口。

                 ③定义通信规则,这个通信规则叫做协议,国际组织定义了通信协议:TCP/IP。

网络模型:OSI参考模型和TCP/IP参考模型

               例如ftp,http是应用层协议,tcp是传输层协议,ip是

                    

网络通信要素:

             IP地址:它是网络中的设备标识,java中对应的是InetAddress类,存在于java.net包中。

                      ①网络中设备的标识
                      ②不易记忆,可用主机名
                      ③本地I回环地址:127.0.0.1 主机名:Localhost。

             端口

                     ①用于标识进程的逻辑地址,不同进程的标识。

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

            传输协议

                    即通信规则,包含TCP和UDP协议。

网络编程UDP(无连接,一般用于聊天、视频)

   特点:

        ①将数据及源和目的封装成数据包中,不需要建立连接。(封包,无连接)
        ②每个数据包的大小限制在64k内。(小数据)
        ③因无连接,是不可靠协议。(不可靠,丢数据)
        ④不需要建立连接,速度快。(速度快)

网络编程TCP(面向连接的,一般用于下载)

    特点:

      ① 建立连接,形成传输数据的通道。(传输,连接)
      ②在连接中进行大数据量传输。(大数据)
      ③通过三次捂手完成连接,是可靠协议。(可靠。在? 我在!我知道你在了)
      ④必须建立连接,效率会稍低。(速度慢)

网络传输Socket

     ①Socket就是为网络服务提供的一种机制。
     ②通信的两端都有Socket。
     ③网络通信其实就是Socket间的通信。
     ④数据在两个Socket间通过IO传输。

UDP传输

   UDP发送数据步骤:

       .  ① 建立udpSocket服务,通过DatagramSocket的对象建立。
          ②提供数据,并将数据封装到数据包中。
          ③通过Socket服务的发送功能,将数据包发送出去。
          ④关闭资源。

   UDP接收数据步骤:

       .  ① 定义udpSocket服务,他会同时监听一个端口。
          ②定义数据包,此包将会存储接收到的字节数据。
          ③通过Socket服务的接收功能,将数据放入数据包中。
          ④关闭资源。    

    UDP传输示例

import java.io.IOException;  
import java.net.DatagramPacket;  
import java.net.DatagramSocket;  
import java.net.InetAddress; 
   
// 接收端  
public class UdpReceive {  
    public static void main(String[] args) throws IOException {  
    	//监听一个端口
        DatagramSocket s = new DatagramSocket(9999);  
   
        byte[] buf = new byte[1024]; 
        //定义数据包
        DatagramPacket p = new DatagramPacket(buf, buf.length);  
        //接收数据
        s.receive(p);  
        //打印数据
        String data = new String(p.getData(), 0, p.getLength());   
        System.out.println("data:" + data);  
        //关闭资源
        s.close();  
    }  
}  

//发送端  
class UdpSend {  
 public static void main(String[] args) throws IOException {  
	 //建立Socket对象
     DatagramSocket socket = new DatagramSocket();  
      
     byte[] data = "Helloworld".getBytes();  
     //将数据封装到数据包中
     DatagramPacket packet = new DatagramPacket(data, data.length,  
             InetAddress.getByName("localhost"), 9999);  
     //将数据包发送出去
     socket.send(packet);  
     //关闭资源
     socket.close();  
 }  
}  

TCP传输

     TCP分客户端和服务端,客户端对应的对象是Socket,服务端对应的对象是ServerSocket。

     Socket 对象建立时,就可以去连接指定主机,因为Tcp是面向连接的,所以在建立Socket服务时,就要有服务端存在,并连接成功,形成通路后,在该通道进行数据的传输。

TCP客户端步骤:

        ①创建客户端的socket服务。指定目的主机和端口;

        ②为了发送数据,应该获取socket流中的输出流(此流后面不需要关闭);

        ③关闭服务;

TCP服务端步骤:

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

         ②获取连接过来的客户端对象。通过ServerSokcet的 accept方法。没有连接就会等,所以这个方法阻塞式的。
         ③客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。
         ④关闭服务端。(可选)

TCP传输示例:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.*;

/*
 要求:
 客户端通过键盘输入向服务端发送一条数据(字符串),
 服务端接收数据,并将字符串转化成大写字母返回给客户端,
 客户端打印转化后的字符串 
 */
public class Client {

	public static void main(String[] args) throws IOException {

		// 建立客户端Socket服务
		Socket s = new Socket("192.168.1.117", 10023);
		// 读取键盘数据
		BufferedReader bufr = new BufferedReader(new InputStreamReader(
				System.in));

		try {
			// 定义目的,将数据写入到Socket服务中,发给服务端
			BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(
					s.getOutputStream()));
			// 获取从服务端读来的数据流
			BufferedReader buIn = new BufferedReader(new InputStreamReader(
					s.getInputStream()));
			String line;
			while ((line = bufr.readLine()) != null) {
				// 将数据写入服务端
				bufw.write(line);
				// readLine()读取的一行不包括换行符,所以要写入一个换行符
				bufw.newLine();
				bufw.flush();
				if ("over".equals(line))
					break;
				// 读取服务端的数据
				String len = buIn.readLine();
				System.out.println(len);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		bufr.close();
		s.close();

	}

}

class Servler {
	public static void main(String[] args) throws IOException {

		ServerSocket ss = new ServerSocket(10023);
		Socket a = ss.accept();
		// 读取客户端的数据
		BufferedReader bufr = new BufferedReader(new InputStreamReader(
				a.getInputStream()));
		// 将数据写入到Socket流中,并发给客户端
		BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(
				a.getOutputStream()));
		String line = null;
		while ((line = bufr.readLine()) != null) {
			System.out.println("服务端:" + line);
			bufw.write(line.toUpperCase());
			bufw.newLine();
			bufw.flush();
		}
		a.close();
		ss.close();

	}
}




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

版权声明:本文为博主原创文章,未经博主允许不得转载。

【好程序员笔记分享】——java中关于异常的知识点

android培训------我的java笔记,期待与您交流! 关于java中异常的知识点也学习了好久了,今天依旧把前段时间学习的异常的知识点整理一下. 好了,开始上笔记: 一:java中异常是...
  • u012960536
  • u012960536
  • 2015年05月11日 22:44
  • 400

excel笔记整理

1、excel:由微软公司生产的办公软件之一,电子制表软件,工作簿,可以用来做表格、进行数据处理等 2、打开方式: 方式一: 开始->所有程序->Microsoft office->Mi...
  • yangzai521
  • yangzai521
  • 2016年12月07日 20:51
  • 340

JAVA学习笔记整理一(基础知识)

初期学习笔记
  • Friday_577
  • Friday_577
  • 2016年05月16日 21:58
  • 307

Java复习笔记

java是一门很好的语言,也是一门庞杂的系统,学习过程中要善于记录和积累。  学习了四年java,但回头看看好像什么都没学到,是因为学习没有成系统,知识没有成系统。...
  • ningning258
  • ningning258
  • 2015年07月18日 11:54
  • 4526

代码笔记总结(一些别人写的代码)

一些别人写的代码,只是觉得写得可以自己可以以后拿来使用的。 1、关于反射的,如何通过一个只用调用一个方法就可以接接收不同的对象并调用其实例方法:这些类必须实现或者继承同一个父类,然后用里氏替换原则(想...
  • w369033345
  • w369033345
  • 2016年07月11日 13:55
  • 542

【学习笔记】大数据处理题目笔记整理

持续更新中……
  • ChenxiCBLOG
  • ChenxiCBLOG
  • 2015年05月15日 20:42
  • 666

java学习笔记总结

Java环境搭建: 下载、安装JDK:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html配置环...
  • pegsa
  • pegsa
  • 2016年05月22日 19:29
  • 7248

live555学习笔记-几个重要对象的生命期

几个重要对象的生命期 live555中很多类,类与类之间的关系复杂,从属关系不明显,层次上看起来也有些乱.所以源代码读起来比较困难,对于一些对象生命的来龙去脉也很难厘清. 但这并不能说明live5...
  • Runningzyx
  • Runningzyx
  • 2016年09月19日 11:16
  • 301

Linux内核【链表】整理笔记(2)

关于链表我们更多时候是对其进行遍历的需求,上一篇博文里我们主要认识了一下和链表操作比较常用的几个内核API接口,其入参全都是清一色的struct list_head{}类型。至于链表的遍历,内核也有一...
  • wjlkoorey
  • wjlkoorey
  • 2016年07月24日 11:00
  • 584

舌尖上的中国第一季整理笔记

自然的馈赠 云南香格里拉----松茸 浙江遂昌----竹笋、冬笋 柳州----大头田笋 云南大理----诺邓盐、诺邓火腿 湖北嘉鱼----莲藕、冬天吃藕汤、藕汤煨排骨 吉林查干湖----冬捕鱼 广西...
  • huwei0518
  • huwei0518
  • 2015年02月06日 13:51
  • 663
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员——Java网络编程-整理笔记
举报原因:
原因补充:

(最多只允许输入30个字)