网络编程列表

来源:互联网 发布:免费家谱制作软件 编辑:程序博客网 时间:2024/06/06 00:47

一:网络编程概述:
Socket客户端和服务端:
Socket客户端中存在两个流,输入流和输出流/InputStream和OutputStream,如果客户端通过输出流中赋值,跟服务端连接后,服务端获取客户端中的Socket流中的输出流通过InputStream流来获取,并打印控制台或做一些相应逻辑,最终关闭客户端socket对象,服务端可以关闭,也可以不关闭;

第一节: 网络编程(概述)
    1. 网络模型
        1.1 OSI参考模型 ---网络七层
        1.2 TCP/IP参考模型 ---四层

    2. 网络通讯要素
        2.1 IP地址
        2.2 端口号
        2.3 传输协议

    3. 通讯举例:
        3.1 通过ip找到对方
        3.2 数据要发送到对方指定的应用程序上,为了标示这些应用程序
            所以给这些网络应用程序都用数字进行标识.
            为了方便称呼这些数据, 把他们成为 端口. 逻辑端口.

            主机1        主机2
            QQ            QQ
            FeiQ          FeiQ
            IP1           IP2

            当主机1的QQ发了一条信息给主机2的QQ时,
            当信息到达主机2以后,主机需要通过端口来判断当前数据要发送给哪个进程
        3.3 定义通讯规则,这个通讯规则称为协议.
                国际组织定义了通用的协议TCP/IP

第二节: 网络编程(概述2)
    1. ipv4由四个字节组成,每个字节最大为255.也就是说,如果出现1.1.1.256,这样的ip是不符合规则的
    2. ipv4分成四个段
    3. 局域网内的ip可以自由划分,不会与公网的ip冲突.
    4. 程序的端口不可以冲突,如果冲突了,可以写一个顺延,分配新的端口.

第三节: 网络编程(网络模型)
    1. OSI参考模型以及TCP/IP模型
        OSI参考模型            TCP/IP
        应用层                应用层(We will play here.)
        表示层
        会话层
        传输层                传输层(We are now here playing...)
        网络层                网际层(We may play here.)
        数据链路层            主机至网络层
        物理层

    2. TCP/IP协议中
        传输层最常见的协议是TCP/UDP
        网际层最常见的协议是IP
        应用层最常见的协议有http, ftp等等.

        应用层是基于传输层的.所以要学习应用层,要先学习传输层和网际层.

第四节: 网络编程(IP地址)
    1. IP地址: 网络中的设备标识
        1.1    IP地址分很多段,是个复杂的事物,因此java将它封装成了对象.
                当我们要操作IP的时候,就可以用java的类进行操作.

        1.2 IP地址对象:
            java.net包中的 InetAddress
            该类没有构造函数.因此应该有个静态的函数返回当前的InetAddress对象.
                InetAddress getLocalHost() ;
                String getHostName() ;
                String getHostAddress() ;
                InetAddress[] getAllByName(String host) ;//getAllByName("www.baidu.com") ;
                InetAddress getByName(String host) ;
第五节: 网络编程(TCP和UDP)
    1.1 UDP 4点
        将源地址、目的地址和数据封装在数据报中直接发出去,不需要建立连接。
        每个数据报的大小被限制在64kb内
        因为是面向无连接的,所以是不可靠的协议
        因为不需要建立连接,所以速度比较快。
    1.2 TCP 4点
        发送数据前进行连接,建立数据传输通道
        通过数据通道进行大数据量传输
        通过三次握手建立连接,是可靠协议
        因为需要建立连接,所以效率稍低

第六节: 网络编程(Socket)//插座???
    1.1 Socket是为网络服务提供的一种机制。
    1.2 通信的两端都有Socket
    1.3 网络通信就是Socket通信
    1.4 数据在两个Socket间通过IO传输.

第七节: 网络编程(UDP-发送端)
    1. UDP协议Socket服务的建立.
        DatagramSocket//此类用来表示发送和接收数据报包的套接字.
            //发送数据报包的函数
            void send(DatagramPacket p) ;
            //接收数据报包的函数
            void receive(DatagramPacket p) ;

            由此可见,发送和接收数据报包都需要使用到DatagramPacket
        DatagramPacket//每条报文仅根据该包中包含的信息从一台机器由到另一台.
            //用来接收长度为length的数据报包的构造方法.
            DatagramPacket(byte[] buf, int length) ;
            //用来发送长度为length的数据报包的构造方法.
            DatagramPacket(byte[] buf, int length, InetAddress address, int port)

第八节: 网络编程(UDP-接收端)
    1.

第九节: 网络编程(UDP-键盘录入方式数据)

第十节: 网络编程(UDP-聊天)

第十一节:  网络编程(TCP传输)
    1. 客户端Socket对象
        服务端ServerSocket对象
    2. 建立连接后,通过Socket中的IO流进行数据的传输
    3. 关闭socket
    4. 注意: 客户端与服务端是两个独立的应用程序.
    5. Socket类
        //Socket类的构造函数
        Socket(InetAddress address, int port) ;//客户端一建立的时候就要连接服务器
        Socket() ; //后void connect(SocketAddress socketAddr)连接服务器
        //Socket类下的方法
        InputStream getInputStream();
        OutputStream getOutputStream() ;

    6. 演示Tcp传输:见TCPDemo.java文件
    7. ServerSocket类
        //ServerSocket类的构造函数
        ServerSocket(int port) ;//创建时绑定一个端口
        //ServerSocket类下的方法
        Socket accept() ;

第十二节: 网络编程(TCP练习)
    1. 需求:
            建立一个文本转换服务器
            客户端给服务端发送文本,服务端会将文本转成大写,再返回给客户端.
            而且客户端可以不断的进行文本的转换.当客户端输入over时,转换结束.


要理解:源是什么、目标又是什么?


客户端:
class TrancClient{
  Socket socketClient = new Socket("192.168.1.1",10005);
  BufferedReader bufr =new  BufferedReader(new InputStreamReader(System.in));

 BufferedWriter bufO=new  BufferedWriter(new OutputStreamWriter(socketClient.getOutputStream())));

 BufferedReader bufIn =new BufferedReader(new InputStreamReader(socketClient.getInputStream())));

 //可以更改为下面这个流,里面自带flush和换行,已经字符集转换封装功能。
 //PrintWriter  out = new PrintWriter(socket.getOutputStream(),true);
//PrintWriter out = new PrintWriter(clientChannel.socket().getOutputStream(),true);
 
 String readLine = null;
 
  while(readLine=bufr.readLine())!=nulll){

    if(readLine.equest("over')){
    break;
    }
   out.write(readLine);
   //用printWriter方式以下语句全部可以注释掉,只需要加上以上一句;

   bufO.write(readLine);
   bufO.newLine();  //如果是键盘输入,源,需要键入回车键,不然一直在等待状态中。
   bufO.flush();      //在socket流中,需要通过flush来完成最终写出;不然有可能阻塞在里面;

}

class TrancServer{

 ServerSocket ss = new ServerSocket(10005);
 Socket serverSocket = ss.accept();
 
BufferedRead bufinput =new BufferedReader(new InputStreamReader(serverSocket.getInputStream())));

BufferedWriter bufout =new  BufferedWriter(new OutputStreamWriter(serverSocket.getOutputStream())));

//可以更改为下面这个流,里面自带flush和换行,已经字符集转换封装功能。
 //PrintWriter  out = new PrintWriter(socket.getInputStream(),true);

String line = null;

 while((line = bufinput.readLine)!= null){
  bufout.writer(line.toUpdataCase()));
  bufout.flush();
  }
 serverSocket.close();
  ss.close();
 }


 


 

原创粉丝点击