• Java使用Socket进行通信


    什么是Socket

    网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。

    使用UDP协议编写Socket

    UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议

    UDP缺点:不可靠,不稳定 
    因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。

    UDP编程主要用到两个类DatagramPacket和DatagramSocket

    具体代码:

    服务端:

     1 package cn.socket;
     2 
     3 import java.net.DatagramPacket;
     4 
     5 import java.net.DatagramSocket;
     6 import java.net.InetAddress;
     7 
     8 
     9 public class ServiceSocket {
    10       /*
    11        *接收客户端发送的信息
    12        */
    13     public static void main(String[] args) throws Exception {
    14       //创建sockpt对象,并传入端口号 与客户端对应
    15         DatagramSocket ds=new DatagramSocket(120);
    16         //接收数据
    17         byte [] by=new byte[1024];
    18         int length=by.length;
    19         DatagramPacket dp=new DatagramPacket(by, length);
    20         ds.receive(dp);
    21         //获取IP地址
    22         byte [] bys=dp.getData();
    23         int le=dp.getLength();
    24         InetAddress inAddress=dp.getAddress();
    25         String ip = inAddress.getHostAddress();
    26         String s = new String(by, 0, length);
    27         System.out.println(ip + "---" + s);
    28              //释放资源
    29            ds.close();
    30                  
    31     }
    32 
    33 }

    客户端:

     1 package cn.socket;
     2 
     3 import java.io.BufferedReader;
     4 
     5 import java.io.InputStreamReader;
     6 import java.net.DatagramPacket;
     7 import java.net.DatagramSocket;
     8 import java.net.InetAddress;
     9 
    10 
    11 public class ClientSocket {
    12       /*
    13        * 向服务端发送信息
    14        */
    15     public static void main(String[] args) throws Exception {
    16        //创建socket对象
    17         DatagramSocket  ds=new DatagramSocket();
    18         //创建流
    19         BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    20         //封装数据
    21         String line = br.toString();
    22         byte [] by=line.getBytes();
    23         int num=by.length;
    24         //IP地址
    25         InetAddress address=InetAddress.getByName("192.168.60.204");
    26         //端口号
    27         int port=120;
    28         //发送数据
    29         DatagramPacket dp=new DatagramPacket(by,num,address, port);
    30         ds.send(dp);
    31         //关闭资源
    32         ds.close();
    33     }
    34 
    35 }
  • 相关阅读:
    List<T> 添加 DataTable
    sql 在not in 子查询有null值情况下经常出现的陷阱
    SQL查询~ 存在一个表而不在另一个表中的数据
    SQL Server xtype
    jQurey 获取当前时间
    sp_rename
    Longest Substring Without Repeating Characters
    Fraction to Recurring Decimal
    链表翻转系列
    蓄水池抽样
  • 原文地址:https://www.cnblogs.com/luoxionghenku/p/8686685.html
Copyright © 2020-2023  润新知