zoukankan      html  css  js  c++  java
  • Socket网络编程

    网络地址分类(32位网络地址)

    A类地址:第一个字节为网络地址,其他3个字节主机地址,第一字节的最高位固定为0

    从1.0.0.1------126.255.255.255

    B类地址:第一字节和第二字节为网络地址,其他2个字节为主机地址,第一字节前两位固定为10

    从128.0.0.1---191.255.255.255

    C类地址:前三个字节为网络地址,最后一个字节是主机地址,第一字节的前三位固定为110

    从192.0.0.1----223.255.255.255

    D类地址:组播地址

    不分网络地址和主机地址,第一字节的前四位固定为1110

    224.0.0.1-----239.255.255.255

    注意几点:

    1、192.168.1.255为广播地址,任何主机都是不能使用的。

    2、每一个网络地址都能组成一个小型的局域网。

    3、127.0.0.1测试tcp,udp网络时使用的内部回环网络

    在Java API中,实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现,分别是:

    (1) DatagramSocket

        DatagramSocket类实现“网络连接”,包括客户端网络连接和服务器端网络连接。实现的就是发送数据时的发射器,以及接收数据时的监听器的角色。

        该类既可以用于实现客户端连接,也可以用于实现服务器端连接。

    (2) DatagramPacket

    DatagramPacket类实现对于网络中传输的数据封装,也就是说,该类的对象代表网络中交换的数据。在UDP方式的网络编程中,无论是需要发送的数据还是需要接收的数据,

    都必须被处理成DatagramPacket类型的对象,该对象中包含发送到的地址、发送到的端口号以及发送的内容等。

    DatagramPacket类的作用类似于现实中的信件。

    UDP客户端有三个步骤:建立连接、发送数据接收数据和关闭连接。

    基于UDP协议的Socket编程步骤

    利用DatagramPacket对象封装数据包

    利用DatagramSocket发送数据包

    利用DatagramScoket接受数据包

    利用DatagramPacket处理数据包

    TCP客户端

     2 
     3 import java.io.BufferedReader;
     4 import java.io.IOException;
     5 import java.io.InputStreamReader;
     6 import java.io.OutputStream;
     7 import java.net.ServerSocket;
     8 import java.net.Socket;
     9 
    10 public class TCP_Clicent {
    11 public static void main(String[] args) throws Exception {
    12     //1.创建对象
    13             ServerSocket sk=new ServerSocket(1122111);
    14             //2.监听
    15             Socket s=sk.accept();
    16             //打包数据
    17             BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));    
    18             BufferedReader bw=new BufferedReader(new InputStreamReader(System.in));
    19             OutputStream os=s.getOutputStream();
    20             String line=null;
    21             while((line=br.readLine())!=null){
    22                 System.out.println("Client 	"+line);                        
    23                 os.write(bw.readLine().getBytes());
    24             }            
    25             //释放资源
    26             s.close();
    27             //sk.close();
    28 }
    29 }

    TCP服务端

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    public class TCP_Service {
    public static void main(String[] args) throws Exception {
        Socket sk=new Socket("192.168.60.127",1122111);
        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();
    
    
    }
    }

    UDP:

    客户端:

    1 import java.io.BufferedReader;
     2 import java.io.InputStreamReader;
     3 import java.net.DatagramPacket;
     4 import java.net.DatagramSocket;
     5 import java.net.InetAddress;
     6 import java.net.SocketException;
     7 
     8 public class UDP_Clicent {
     9 public static void main(String[] args) throws Exception  {
    10     DatagramSocket l=new DatagramSocket();
    11     DatagramSocket ds=new DatagramSocket();
    12     BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    13     String line=null;
    14     byte [] bys=line.getBytes();
    15     int num=bys.length;
    16     InetAddress address=InetAddress.getByName("192.168.60.127");
    17     int port=101236;
    18     DatagramPacket dp=new DatagramPacket(bys,num, address,port);
    19     ds.send(dp);        
    20     ds.close();
    21 }
    22 }

    服务器:

    1 import java.net.DatagramPacket;
     2 import java.net.DatagramSocket;
     3 import java.net.InetAddress;
     4 import java.net.SocketException;
     5 
     6 public class UDP_Service {
     7 
     8     public static void main(String[] args) throws Exception {
     9         DatagramSocket ds=new DatagramSocket(101236);
    10         byte[] bys = new byte[1024];
    11         int len = bys.length;
    12         DatagramPacket dp = new DatagramPacket(bys, len);
    13         ds.receive(dp);
    14         byte[] by = dp.getData();
    15         int length = dp.getLength();
    16         InetAddress address = dp.getAddress();
    17         String ip = address.getHostAddress();
    18         String s = new String(by, 0, length);
    19         System.out.println(ip + "---" + s);
    20     ds.close();
    21 
    22     }
    23 
    24 }

  • 相关阅读:
    uni-app实现下拉效果
    求点到已知直线的距离和点到直线的垂点坐标
    Mybatis 自定义SqlSessionFactoryBean扫描通配符typeAliasesPackage
    前端string类型的日期 -后端实体类属性为Date
    如何更新npm为最新版本
    简述ThreadPoolExecutor的运行机制
    list在遍历过程中的add/remove
    Linux下安装mysql
    Linux下安装activeMQ并设置开机启动
    solr集群环境搭建
  • 原文地址:https://www.cnblogs.com/1287758807cjh/p/8686965.html
Copyright © 2011-2022 走看看