zoukankan      html  css  js  c++  java
  • Socket编程_初始

    网络编程的概念:
    网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用,编程人员可以不用考虑……

    网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的!中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理!
    网络编程三要素:
             A:IP地址  B:端口  C:协议

    IP地址 = 网络地址 +主机地址
    网络地址:标识计算机或网络设备所在的网段
    主机地址:标识特定主机或网络设备
    IP地址的分类: 
    A类:1.0.0.1---127.255.255.254    1.x.x.x 私有有地址(在互联网上不用,而用在局域网中)
    B类:128.0.0.1---191.255.255.254  172.16.0.0---172.31.255.255 私有地址
    C类:192.0.0.1---223.255.255.254  192.168.x.x私有地址
    D类:224.0.0.1---239.255.255.254
    E类:240.0.0.1---247.255.255.254
    特殊IP:
    127.0.0.1 回环地址
    x.x.x.255 广播地址
    x.x.x.0 网络地址

    查看本机的IP地址
    ipconfig
    测试网络是否通畅
    ping + IP地址

    网络通信协议
    为在网络中不同的计算机之间进行通信而建立的规则、标准或约定的集合
    TCP协议(Transmission Control Protocol 传输控制协议)
    面向连接的、可靠的、基于字节流的传输通信协议
    UDP协议(User Datagram Protocol 用户数据报协议)
    无连接的协议,在传输数据之前,客户端和服务器并不建立和维护连接

    Socket套接字
    是网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
    socket实现的原理机制:
    1、通信的两端都有Socket
    2、网络通信其实就是Socket间的通信
    3、数据在两个Socket间通过IO传输
    java.net包
    Socket
    ServerSocket
    DatagramPacket
    DatagramSocket
    InetAddress

    基于TCP协议的Socket网络通信
    用来实现双向安全连接网络通信
    Socket通信模型
    进行网络通信时,Socket需要借助数据流来完成数据的传递工作

    DatagramPacket类
    封装了数据报的数据、数据长度、目标地址和目标端口

    DatagramSocket类
    接收和发送DatagramPacket对象封装好的数据报

    --以下是简单的实例

    UDP协议(User Datagram Protocol 用户数据报协议)
    无连接的协议,在传输数据之前,客户端和服务器并不建立和维护连接

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.Socket;
            //客户
    public class Customer {
    
        public static void main(String[] args) throws Exception {
            
            Socket sk=new Socket("192.168.60.215",11111);
                    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
                    BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
                    String line=null;
                    while((line=br.readLine())!=null){            
                        bw.write(line);
                        bw.newLine();
                        bw.flush();
                        
                        InputStream is=sk.getInputStream();            
                        byte [] by=new byte[1024];
                        int num=is.read(by);
                        String h=new String(by, 0, num);
                        System.out.println("Service:	"+h);
                    }                    
                        //br.close();
                        //bw.close();
                        sk.close();
        }
    
    }
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
            //顾客
    public class Guest {
    
        public static void main(String[] args) throws Exception {
            //1.创建对象
            ServerSocket sk=new ServerSocket(11111);
            //2.监听
            Socket s=sk.accept();
            //打包数据
            BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));    
            BufferedReader bw=new BufferedReader(new InputStreamReader(System.in));
            OutputStream os=s.getOutputStream();
            String line=null;
            while((line=br.readLine())!=null){
                System.out.println("Client 	"+line);        
                
                os.write(bw.readLine().getBytes());
            }            
            //释放资源
            s.close();
            //sk.close();
    
        }
    
    }

    TCP协议(Transmission Control Protocol 传输控制协议)
    面向连接的、可靠的、基于字节流的传输通信协议

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
            //客户端
    public class Customerservice {
    
        public static void main(String[] args) throws Exception {
            DatagramSocket ds=new DatagramSocket();
            
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            String line="hehe";
            byte [] bys=line.getBytes();
            int num=bys.length;
    
            InetAddress address=InetAddress.getByName("192.168.60.215");
    
            int port=1086;
            DatagramPacket dp=new DatagramPacket(bys,num, address,port);
    
            ds.send(dp);        
            ds.close();
    
        }
    
    }
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
            //服务器端
    public class Serverside {
    
        public static void main(String[] args) throws Exception {
            
            DatagramSocket ds=new DatagramSocket(1086);
    
            byte[] bys = new byte[1024];
            int len = bys.length;
            DatagramPacket dp = new DatagramPacket(bys, len);
    
            ds.receive(dp);
    
            byte[] by = dp.getData();
            int length = dp.getLength();
    
            InetAddress address = dp.getAddress();
            String ip = address.getHostAddress();
    
            String s = new String(by, 0, length);
            System.out.println(ip + "---" + s);
    
        ds.close();
    
        }
    
    }
  • 相关阅读:
    leetcode821
    leetcode872
    leetcode700
    leetcode806
    2019-9-2-win10-uwp-右击浮出窗在点击位置
    2019-9-2-win10-uwp-打包第三方字体到应用
    2019-10-18-dotnet-文件读写务必注意事项
    2018-8-10-win10-uwp-如何创建修改保存位图
    2018-8-9-win10-uwp-装机必备应用-含源代码
    2019-11-1-asp-dotnet-core-简单开发P2P中央服务器
  • 原文地址:https://www.cnblogs.com/matianpeng/p/8686690.html
Copyright © 2011-2022 走看看