zoukankan      html  css  js  c++  java
  • android Socket 编程

    Socket 通信

     1.UDP实现  (DatagramSocket)

    【客户端】

    //首先创建一个DatagramSocket对象

    DatagramSocket socket = new DatagramSocket(4567);

    //创建一个InetAddress

    InetAddress serverAddress = InetAddress.getByName("192.168.1.104");

    String str = "hello";  

    //这是要传输的数据 byte data [] = str.getBytes();

     //把传输内容分解成字节

    //创建一个DatagramPacket对象,并指定要讲这个数据包发送到网络当中的哪个、地址,以及端口号

    DatagramPacket packet = new DatagramPacket(data,data.length,serverAddress,4567);

    //调用socket对象的send方法,发送数据

    socket.send(packet);

    【服务器端】

    //创建一个DatagramSocket对象,并指定监听的端口号                

    DatagramSocket socket = new DatagramSocket(4567);    

     byte data [] = new byte[1024];                

    //创建一个空的DatagramPacket对象                

    DatagramPacket packet = new DatagramPacket(data,data.length);                

    //使用receive方法接收客户端所发送的数据,                

    //如果客户端没有发送数据,该进程就停滞在这里                

    socket.receive(packet);                

    String result = new String(packet.getData(),packet.getOffset(),packet.getLength());

    2.TCP通信

    【客户端】

    创建一Socket对象并指明服务器端的IP及端口号

    Socket socket = new Socket("192.168.1.0",45678);

    //向服务器发送消息

    PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);

    out.println(message);

    //从服务器接收消息

    BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));

    String rString = is.readLine().toString();

    【服务器端】

    //创建一个ServerSocket对象,并让这个Socket在45678端口监听

    serverSocket = new ServerSocket(45678);

    //调用ServerSocket的accept()方法,接受客户端所发送的请求,

    //如果客户端没有发送数据,那么该线程就停滞不继续                

    Socket socket = serverSocket.accept();                

    //从Socket当中得到InputStream对象                

    InputStream inputStream = socket.getInputStream();                

    byte buffer [] = new byte[1024*4];                

    int temp = 0;                

    //从InputStream当中读取客户端所发送的数据                

    while((temp = inputStream.read(buffer)) != -1) {

                       String str = new String(buffer,0,temp);

      //接下来可以对从客户端接收到的消息做处理                

    }

      

    【Socket获取客户端IP地址及端口号】

       Socket类包含一些非常有用的属性,这些属性允许确定关于正在连接的客户端的信息。其中关键信息之一    是返回EndPoint对象的RemoteEndPoint属性。

    EndPoint类本身是抽象的,要想收集有用的信息,需·要把    EndPoint强制类型转换为IPEndPoint对象。

    IPEndPoint类包含远程客户端的IP地址和端口号。具体用法如下:    

    TcpListener tcpl=new TcpListener(port);    

    Socket s=tcpl.AcceptSocket();    

    label1.text=((IPEndPoint)s.RemoteEndPoint).Address.ToString();

     label2.text=((IPEndPoint)s.RemoteEndPoint).Port.ToString();

  • 相关阅读:
    C# 的 TOML 库
    测试龙芯 LoongArch .NET之 使用 FastTunnel 做内网穿透远程计算机
    开源的负载测试/压力测试工具 NBomber
    .NET 6 Preview 6 正式发布: 关注网络开发
    .NET 5.0 Docker 镜像 错误修复方法
    [LeetCode] 1191. K-Concatenation Maximum Sum K次串联后最大子数组之和
    [LeetCode] 1190. Reverse Substrings Between Each Pair of Parentheses 反转每对括号间的子串
    [LeetCode] 1189. Maximum Number of Balloons 气球的最大数量
    [LeetCode] 1187. Make Array Strictly Increasing 使数组严格递增
    [LeetCode] 1186. Maximum Subarray Sum with One Deletion 删除一次得到子数组最大和
  • 原文地址:https://www.cnblogs.com/lzjsky/p/5035371.html
Copyright © 2011-2022 走看看