第六天_网络

来源:互联网 发布:徐州淘宝店招聘包装工 编辑:程序博客网 时间:2024/06/05 09:36

1.基于TCP的程序 这个程序有很多异常等待处理,本人暂不能完善,请见谅,谢谢~~

package com.panpan;import java.io.*;import java.net.*;

public class testTCPServer {  /** * @Server应先启动 */

    public static void main(String[] args){

    try{    String st= null;

        ServerSocket ss= new ServerSocket(9226);//建立服务器端【端口】

        Socket s= ss.accept();//【阻塞式,同步式】接受客户端返回类型为Socket;

        System.out.println("接受到客户端申请");//有连接自动检测到能!;

        DataInputStream  din= new DataInputStream(s.getInputStream());

            //得到从客户端来的流,直接赋给din,括号里【本身就是字节流?】

            //从键盘获取传给服务器端

            InputStreamReader rin= new InputStreamReader(System.in);

            BufferedReader brin= new BufferedReader(rin);

            //从键盘获取传给服务器端

            OutputStream out= null;

            out= s.getOutputStream();//写到客户流里;

            DataOutputStream dout= new DataOutputStream(out);//用包装成字符流;

            do{ System.out.println(din.readUTF());

            st= brin.readLine();

dout.writeUTF("服务器说:"+st+"客户端你的地址是:"+s.getInetAddress()+s.getPort());

            }while(!st.equals("exit"));

            din.close();//关闭接收流;       s.close();//关闭连接;

}catch(IOException e){ e.printStackTrace();System.out.println("IO错误"+e);}}}

package com.panpan;import java.io.*;import java.net.*;

public class testTCPClient {  /** *再启动Client* **/

    public static void main(String[] args)  {

        try{    String st= null;

        Socket s= new Socket("192.168.1.101",9226);//客户端【服务器地址和开放的端口】

        OutputStream ot= s.getOutputStream();//到服务器端的流;给os直接赋值,不是new

        DataOutputStream dot= new DataOutputStream(ot);//套接在字节流上,可发送字符!

        //从键盘获取传给服务器端

        InputStreamReader rin= new InputStreamReader(System.in);

        BufferedReader brin= new BufferedReader(rin);

        //从键盘获取传给服务器端

        DataInputStream din= new DataInputStream(s.getInputStream());//包装成字符流,接受服务器端的字符      

        do{ st= brin.readLine();

        dot.writeUTF("客户端说:"+st);//给服务器端发送字符

        dot.flush();//清空发送流的缓存

        System.out.println(din.readUTF());//输出从服务器端得到的UTF字符!

        }while(!st.equals("exit"));

        dot.flush();//清空发送流的缓存

        dot.close();//关闭发送流

}catch(ConnectException e){e.printStackTrace();System.out.print("服务器失败");}}

2.基于UDP的程序【服务器端一般都是无限循环,不退出?发送float数据,注释掉了的是发送字符串

 package com.panpan;import java.net.*;import java.io.*;

public class testUDPServer {  /** * @UDP服务器端 */

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

        byte[] buf= new byte[1024];//建立字节个数组1k

        DatagramPacket dp= new DatagramPacket(buf,buf.length);

        //让包裹占用buf,的全部长度;

        DatagramSocket ds= new DatagramSocket(9226);

        //建立接受机制,监听端口9226,客户端都要把数据发送到个端口 

        while(true){

            ds.receive(dp);//接收包,放入dp占用那的buf数组里;

            // 接受到【数据类型】从包中取出即可,传送时已经到dp-buf里了!

            ByteArrayInputStream bin= new ByteArrayInputStream(buf);

            DataInputStream din= new DataInputStream(bin);

            float f= din.readFloat();//IO,从字节数组里读出一个float数据;

            System.out.println(f);

            //System.out.println(new String(buf,0,dp.getLength()));

            //输出放入buf数组里的数据【转换成字符串形式??】  }}}

package com.panpan;import java.io.*;import java.net.*;

public class testUDPClient {  /** * @param args */

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

        // TODO Auto-generated method stub

    /*  byte buf[]=(new String("HelloUDP").getBytes());

        //把字符串转换成字节数组,放入buf数组里;

        DatagramPacket dp= new DatagramPacket(buf,buf.length,new InetSocketAddress("192.168.1.101",9226));

        //UDP包【指向】包装数组,把UDP包打上,套用buf数组的大小,和发往的地址SocketAddress

        */

        //传递数值型数据,打包发走

        float n=1.23456f;

        ByteArrayOutputStream bout= new ByteArrayOutputStream();

        DataOutputStream dout= new DataOutputStream(bout);

        dout.writeFloat(n);//float数据写入字节内存

        byte[] buf= bout.toByteArray();//把字节内存转换成字节数组,就可以打包传送了。

        //转换成字节数组,才能传送;在服务器端还要转换成相应的类型

        DatagramPacket dp= new DatagramPacket(buf,buf.length,new InetSocketAddress("192.168.1.101",9226));

        DatagramSocket ds= new DatagramSocket(9227);

        ds.send(dp);//发送      ds.close();}}

【网摘,关于网络协议】

TCP:面向连接,可靠的协议。UDP:不可靠,无连接的协议(SNMPDNS

ISO 国际标准化组织,OSI 开放系统互连的体系结构
1.OSI网络分层:各层协议:物理层 : EIA/TLA RS...数据链路层: SDLC,STP...
                 
网络层 : IP,IPX... 传输层
: TCP,UDP...
                 
会话层  : ZIP...   表示层: JPEG,MPEG...应用层
: FTP,HTTP,SNMP...
2 TCP/IP
参考模型

 
TCP/IPI网络分层(对应OSI网络分层):  主机-网络层(物理层,数据链路层)

    
网络互联层(网络层) 传输层(传输层)    应用层(会话层,表示层,应用层)
 
TCP/IP协议:对网络分层的各层次作了简化,【除主机-网络层外】提供完善的协议

 
③各层主要功能
   
【主机-网络层】:TCP/IP协议没有提供实现及协议,要求第三方实现的主机-网络层为上层提供一个访问接口,来传递IP数据包。,, 美国电气及电子工程师学会实现的协议集有:以太网(IEEE802.3),令牌环网(IEEE802.4

   
【 网络互联层】:功能是发送IP数据包到目标主机(使用了IP协议,规定数据包的格式及数据包寻找路由的流程)

  
【 传输层】:功能是源主机和目标主机的进程可以会话。它用了二种协议:TCPUDP,,TCP:面向连接,可靠的协议。UDP:不可靠,无连接的协议(SNMPDNS

【应用层】1 TCP应用层的协议:FTP:文件传输协议(网络上传输文件)。TELNET:虚拟终端协议。HTTP :超文本传输协议 HTTPS:安全超文本传输协议 POP3:邮局协议(访问远程服务器上的邮件)IMAP4:消息访问协议(POP3的升级版)SMTP:简单邮件协议(发送电子邮件)3.UDP协议: SNMP :简单网络管理协议,DNS  : 域名系统协议

4.IP
协议: IP网络中每台主机有唯一的IP用于标识每个主机。IP地址的取值范围:0~255 IP地址由IP网址与IP主机地址组成。网络掩码确定IP中哪部分是网址,哪部分是主机地址。IP网址 = 网络掩码 & IP地址(二进制)NIC(统一负责全球的地址规划与管理),CNNIC(中国地区IP分配与管理),192.168.0.0是网络地址,192.168.111.111广播地址
  
① 发送数据包的过程

      IP
网络上的主机通过ARP(地址解析协议),向相同IP网址的主机(包括真正的物主机地址:物理地址和IP地址)发送数据包。

      ARP
通过本地网络的路由的物理地址向目标IP地址发送数据包。具体按以下搜索并处理数据包:数据包生命周期已到就抛弃---〉路由表的主机---〉 路由表,匹配子网的路由器--->路由表,匹配网络的路由器---〉默认路由。

②域名 :域名是从右到左表达意义,一般表示为:主机机器.单位名.网络名.顶层域名
.
      DNS(Domain Name System)
:提供域名与IP地址的转换,因它存放了域名与IP地址的映射信息。

URL(Uniform Resource Locator:统一资源定位器)组成部分:

应用层协议://主机IP地址或域名/资源所在路径/文件名,URL中常见的协议:ftp,file(访问本地计算机所在文件
5.TCP
协议及端口
T
     
TCP协议确保进程间顺序通信及在IP协议在传送数据时的顺序重组包及数据完整。

     
②端口范围为:0~655350~1023一般为固定服务。21FTP25SMTP(邮件传输服务)80HTTP(文本传输)135RPC(远程过程调用)

     
③客户进程请求服务器进行TCP连接时,操作系统为随机分配一个未占用端口,断开时端口被释放。  注意事项:TCPUDP通过端口标识进程。TCPUDP端口取值各自自由,允许这二个端口取值一样。

6.RFC
Request For Comment    RFC:互联网相关技术规范性文档。

7.
客户/服务器通信模式 :有二个通信进程中,A为客户端进程,B为服务端进程, AB发出请求,B响应请求。B可向多个客户端提供服务。    网络应用层规定了客户程序与服务程序通信的细节。如HTTP协议规定了请求与响应格式。

8.
应用层通用服务端口
:
   
文件传输服务21FTP,远程登录23TELNET ,传输邮件服务
25SMTP
   
超文本传输服服80HTTP,访问远程服务的邮件服务
110POP3
   
互联网消息存取服务143IMAP4,安全的超文本传输服务
443HTTPS
   
安全的远程登录992TELNETS,安全的互联网消息存取服务
993IMAPS

这章暂时了解了,两对儿基本的发送跟接受,TCP/UDP,知道的越多,才发现不知道的也跟着变多。。。但是我们怎样才能在有限的时间作出最适合,最有用的,才是真正的知识!改变思想,才能创造!做好自己努力能做的!