Java基础第二十三天--网络编程

哎,最近浪费了好多的时间...总之,从现在开始两个方向:

1. javaEE  将来去淘宝工作啊大笑

2. android 移动互联网是大势所趋,没错的

 

网络编程
1.  OSI(open system interconnection) 开放系统互连参考模型
 1层物理层:  主要定义物理设备标准,如网线的接口类型、光纤的接口类型
     各种传输介质的传输速率等。它的主要作用是传输比特流(由1、0
     转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是
     我们常说的数模转换和模数转换)。这一层的数据叫做比特。
 2层数据链路层: 主要将从物理层接收到的数据进行MAC地址(网卡的地址)的封装和
     解封装。常把这一层的数据叫做帧。在这一层工作的设备是交换机,数据
     通过交换机来传输。
 3层网络层:  主要将从下层接收到的数据进行IP地址(例如192.168.0.1)的封装和解封装。
     在这一层工作的设备是路由器,常把这一层的数据叫做数据包
 4层传输层:  定义了一些传输数据的协议和端口号(www端口80等),如TCP,UDP
     主要是将下层接收的数据进行分段和传输,到达目的地址后再进行重组
     常把这一层数据叫做段
 5层会话层:  通过传输层(端口号:传输端口和接收端口)建立数据传输的通路。主要在
     你的系统之间发起会话或者接受会话请求(设备之间需要画像认识可以是IP,
     也可以是MAC或者是主机名)
 6层表示层:  主要是进行对接收的数据进行解释、加密和解密、压缩与解压缩等(也就是把
     计算机能够识别的东西转换成人能够识别的东西(如图片、声音等))。
 7层应用层:  主要是一些终端的应用,可以理解成我们在电脑屏幕上看到的东西
2. 网络通讯3要素
 IP地址 --  网络中设备的标识,本地环回地址:127.0.0.1  主机名:localhost
 端口号 --  用于表示进程的逻辑地址,不同进程的标识,每个网络程序都会至少有一个逻辑端口
    0~65535,其中0~1024为系统使用或保留端口
 协议 --  TCP UDP
3. Socket
 用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,
 同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务
 数据其实是在socket间通过IO流进行传输
4. UDP协议发送数据步骤(发送端):
 1)创建发送端的socket对象 DatagramSocket ds = new DatagramSocket();   
 2)造数据     byte[] buf = "hello,udp,我来了".getBytes();
        InetAddress address = InetAddress.getByName("10.13.21.172");
 3)把数据打包    DatagramPacket dp = new DatagramPacket(buf, buf.length, address, 12306);
 4)发送数据     ds.send(dp);
 5)释放资源     ds.close();
 
 UDP协议接受数据步骤(接收端):
 1)创建接收端socket对象  DatagramSocket ds = new DatagramSocket(12306);
 2)造一个空数据包   byte[] bys = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bys, bys.length);
 3)接收数据     ds.receive(dp);
 4)解析数据并显示   InetAddress address = dp.getAddress();
        String ip = address.getHostAddress();
        
        byte[] bys2 = dp.getData();
        int length = dp.getLength();
        String s = new String(bys2, 0, length);

        System.out.println("ip:" + ip + " data " + s);
 5)释放资源     ds.close();  
5.  TCP协议服务器操作步骤(服务器端):
 1)创建服务器Socket对象,并指定端口  ServerSocket ss  = new ServerSocket(8888);
 2)监听客户端对象的连接(建立连接通道) Socket s = ss.accept();
 3)获取输入流,读取数据并反馈   InputStream is = s.getInputStream();
           byte[] bys = new byte[1024]; 
           int len = is.read(bys);
           String server = new String(bys,0,len);
           //给出反馈
           OutputStream os = s.getOutputStream();
           os.write("数据已收到".getBytes());
    
 4)释放资源
           s.close();
           ss.close();
           
 TCP协议发送数据步骤(客户端):
 1)创建TCP协议发送端Socket对象,指定服务器ip和端口(隐含了通道的建立)
        Socket s = new Socket("10.13.21.172",12345);        
 2)获取输出流,写数据
        OutputStream os = s.getOutputStream();
        os.write("hello,tcp".getBytes());
 3)释放资源
        os.close();
 
 注意:TCP协议一定要先运行服务器
 
6.  客户端程序存在的问题-->通道对象如何判断输入结束 
 while ((line = br.readLine()) != null ) {  //这里可能有问题  这里是通道,不是之前的文件对象
 if ("over".equals(line)) {
  break;
 }
 bw.write(line);
 bw.newLine();
 bw.flush();
}

socket.shutdownOutput(); //通知服务器,我结束了

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值