网络编程技术

简介: config查看本机的IP地址ping命令测试网络是否通畅网络是连接在一起共享数据和资源的计算机按照覆盖范围可以分为:局域网、城域网、广域网ping 127.0.0.1检查TCP/IP协议安装是否正确

1、查看本机的IP地址和网络相关概念

config查看本机的IP地址
ping命令测试网络是否通畅
网络是连接在一起共享数据和资源的计算机
按照覆盖范围可以分为:局域网、城域网、广域网
ping 127.0.0.1检查TCP/IP协议安装是否正确

2、基于TCP协议的网络编程

①建立连接
②打开socket关联的输入/输出流
③从流中读取信息
④关闭流和socket

注意点:
1、先写服务器,再写客户端
2、在客户端输出部分要加socket.shutdownOutput()(相当于告诉服务器我说的话说完了),若用字符流写,需要在socket.shutdownOutput()前面加上flash方法,清空缓存
3、本机localhost
4、端口号不低于1024

三、实例

1、客户端发送的请求为String字符串

package demo1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/*
 * 服务器
 */
public class LoginServece {
  public static void main(String[] args) throws Exception {
    //建立连接
    ServerSocket serverSocket= new ServerSocket(8000);
    Socket socket =serverSocket.accept();
    //打开输入流
    InputStream is=socket.getInputStream();
    //读
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String info=null;
    while((info=br.readLine())!=null) {
      System.out.println("我是服务器,客户端说:"+info);
    }
    // 给回应
    String reply ="我是服务器,欢迎登陆";
    OutputStream os=socket.getOutputStream();
    os.write(reply.getBytes());
    //关闭资源
    os.close();
    br.close();
    is.close();
    socket.close();
  }
}
package demo1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
/*
 * 客户端
 */
public class LoginClient {
  public static void main(String[] args) throws Exception, IOException {
    Socket socket = new Socket("localhost", 8000);
    // 发送请求
    OutputStream os = socket.getOutputStream();
    String info = "姓名:jim  密码12345";
    os.write(info.getBytes());
    socket.shutdownOutput();
    // 读回应
    InputStream is = socket.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String replu = null;
    while ((replu = br.readLine()) != null) {
      System.out.println("我是客户端,服务器说:" + replu);
    }
    br.close();
    is.close();
    os.close();
    socket.close();
  }
}

2、客户端传出的是一个对象的情况
需要将对象序列化,注意要实现Serializable接口

package demo2;
import java.io.Serializable;
public class User implements Serializable{
  private String name;
  private String psd;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getPsd() {
    return psd;
  }
  public void setPsd(String psd) {
    this.psd = psd;
  }
  public User() {
    super();
    // TODO Auto-generated constructor stub
  }
  public User(String name, String psd) {
    super();
    this.name = name;
    this.psd = psd;
  }
  @Override
  public String toString() {
    return "用户名:"+this.getName()+"\t"+"密码:"+this.getPsd();
  }
}
package demo2;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/*
 * 服务器
 */
public class LoginServece {
  public static void main(String[] args) throws Exception {
    //建立连接
    ServerSocket serverSocket= new ServerSocket(8000);
    Socket socket =serverSocket.accept();
    //打开输入流
    InputStream is=socket.getInputStream();
    //读
    ObjectInputStream ois = new ObjectInputStream(is);
    User user=(User) ois.readObject();
    System.out.println(user);
    // 给回应
    OutputStream os=socket.getOutputStream();
    String reply ="我是服务器,欢迎登陆";
    os.write(reply.getBytes());
    //关闭资源
    os.close();
    ois.close();
    is.close();
    socket.close();
  }
}
package demo2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
/*
 * 客户端
 */
public class LoginClient {
  public static void main(String[] args) throws Exception, IOException {
    Socket socket = new Socket("localhost", 8000);
    // 发送请求
    OutputStream os = socket.getOutputStream();
    ObjectOutputStream oos =new ObjectOutputStream(os);
    User user =new User("Jack", "123456");
    oos.writeObject(user);
    // 读回应
    InputStream is = socket.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String replu = null;
    while ((replu = br.readLine()) != null) {
      System.out.println("我是客户端,服务器说:" + replu);
    }
    os.close();
    oos.close();
    socket.close();
  }
}

3、利用多线程实现多个客户端发出请求情况
①创建服务器线程类,run()方法实现对一个请求的响应处理
②死循环让服务器一直处于监听状态
③服务器每监听一个线程,创建一个线程对象并启动

package demo3;
import java.net.ServerSocket;
import java.net.Socket;
/*
 * 服务器
 */
public class LoginServece {
  public static void main(String[] args) throws Exception {
    //建立连接
    ServerSocket serverSocket= new ServerSocket(8000);
    Socket socket;
    while(true) {
      socket=serverSocket.accept();
      MyThread thread =new MyThread(socket);
      thread.start();
    }
  }
}
package demo3;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.net.Socket;
public class MyThread extends Thread{
  private Socket socket;
  public MyThread(Socket socket) {
    this.socket = socket;
  }
  @Override
  public void run() {
    //打开输入流
        InputStream is=null;
        ObjectInputStream ois=null;
        OutputStream os=null;
        try {
          is = socket.getInputStream();
          //读
          ois = new ObjectInputStream(is);
          User user=(User) ois.readObject();
          System.out.println(user);
          // 给回应
          os=socket.getOutputStream();
          String reply ="我是服务器,欢迎登陆";
          os.write(reply.getBytes());
        } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        } catch (ClassNotFoundException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }finally {
          //关闭资源
          try {
            os.close();
          } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
          try {
            ois.close();
          } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
          try {
            is.close();
          } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
          try {
            socket.close();
          } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
        }
  }
}
package demo3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
/*
 * 客户端
 */
public class LoginClient22 {
  public static void main(String[] args) throws Exception, IOException {
    Socket socket = new Socket("localhost", 8000);
    // 发送请求
    OutputStream os = socket.getOutputStream();
    ObjectOutputStream oos =new ObjectOutputStream(os);
    User user =new User("good", "111111");
    oos.writeObject(user);
    // 读回应
    InputStream is = socket.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String replu = null;
    while ((replu = br.readLine()) != null) {
      System.out.println("我是客户端,服务器说:" + replu);
    }
    os.close();
    oos.close();
    socket.close();
  }
}

四、InetAddress类

位于java.net包中,常用于封装IP地址和DNS
静态方法
InetAddress.getByName(String hostName)
返回指定主机名的InetAddress对象

五、基于UDP协议的socket编程

四个步骤
1、DatagramPacket对象封装数据包
2、DatagramSocket发送数据包
3、DatagramSocket接收数据包
4、DatagramPacket处理数据包
TCP和UDP协议的异同

实现实例:

package socket4;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
/*
 * 基于UDP协议的网络编程
 */
public class LoginnServerce {
  public static void main(String[] args) {
    DatagramSocket socket=null;
    try {
      //接收客户端发过来的请求
      //1、建立一个空包用来收
      byte[] b =new byte[1024];
      DatagramPacket dp = new DatagramPacket(b, b.length);
      //2、创建DatagramSocket,(快递点)
      socket =new DatagramSocket(8000);
      //3、收数据
      socket.receive(dp);
      //读取数据
      String info = new String(dp.getData(),0,dp.getData().length);
      System.out.println("客户端说:"+info);
      //给客户端一个响应
      String reply = "我是服务器,你好,客户端!";
      DatagramPacket dp1=new DatagramPacket(reply.getBytes(), reply.getBytes().length, InetAddress.getByName("localhost"), 8000);
      //不用再创建socket
      socket.send(dp1);
    } catch (SocketException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }finally {
      if(null!=socket) {
        socket.close();
      }
    }
  }
}
package socket4;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
/*
 * 客户端
 */
public class LoginClient {
  public static void main(String[] args) {
    String info="你好啊,服务器!";
    byte[] infos=info.getBytes();
    //获得一个InetAddress
    InetAddress address;
    DatagramSocket socket=null;
    try {
      address = Inet4Address.getByName("localhost");
      //建立一个包裹封装数据
      DatagramPacket dp =new DatagramPacket(infos,infos.length,address,8000);
      //建立快递点
      socket =new DatagramSocket();
      //通过快递点发送数据
      socket.send(dp);
      //接收服务器发来的信息
      //创建一个空包接收
      byte[] b = new byte[1024];
      DatagramPacket dp1 =new DatagramPacket(b, b.length);
      socket.receive(dp1);
      // 读取信息
      String reply = new String(dp1.getData(), 0, dp1.getData().length);
      System.out.println(reply);
    } catch (UnknownHostException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (SocketException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }finally {
      socket.close();
    }
  }
}
目录
相关文章
|
27天前
|
监控 前端开发 安全
Netty 高性能网络编程框架技术详解与实践指南
本文档全面介绍 Netty 高性能网络编程框架的核心概念、架构设计和实践应用。作为 Java 领域最优秀的 NIO 框架之一,Netty 提供了异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。本文将深入探讨其 Reactor 模型、ChannelPipeline、编解码器、内存管理等核心机制,帮助开发者构建高性能的网络应用系统。
167 0
|
3月前
|
监控 算法 安全
基于 C# 基数树算法的网络屏幕监控敏感词检测技术研究
随着数字化办公和网络交互迅猛发展,网络屏幕监控成为信息安全的关键。基数树(Trie Tree)凭借高效的字符串处理能力,在敏感词检测中表现出色。结合C#语言,可构建高时效、高准确率的敏感词识别模块,提升网络安全防护能力。
90 2
|
9月前
|
边缘计算 容灾 网络性能优化
算力流动的基石:边缘网络产品技术升级与实践探索
本文介绍了边缘网络产品技术的升级与实践探索,由阿里云专家分享。内容涵盖三大方面:1) 云编一体的混合组网方案,通过边缘节点实现广泛覆盖和高效连接;2) 基于边缘基础设施特点构建一网多态的边缘网络平台,提供多种业务形态的统一技术支持;3) 以软硬一体的边缘网关技术实现多类型业务网络平面统一,确保不同网络间的互联互通。边缘网络已实现全球覆盖、差异化连接及云边互联,支持即开即用和云网一体,满足各行业需求。
252 4
|
5月前
|
调度 Python
探索Python高级并发与网络编程技术。
可以看出,Python的高级并发和网络编程极具挑战,却也饱含乐趣。探索这些技术,你将会发现:它们好比是Python世界的海洋,有穿越风暴的波涛,也有寂静深海的奇妙。开始旅途,探索无尽可能吧!
125 15
|
10月前
|
负载均衡 网络协议 网络性能优化
动态IP代理技术详解及网络性能优化
动态IP代理技术通过灵活更换IP地址,广泛应用于数据采集、网络安全测试等领域。本文详细解析其工作原理,涵盖HTTP、SOCKS代理及代理池的实现方法,并提供代码示例。同时探讨配置动态代理IP后如何通过智能调度、负载均衡、优化协议选择等方式提升网络性能,确保高效稳定的网络访问。
997 2
|
5月前
|
机器学习/深度学习 算法 PyTorch
Perforated Backpropagation:神经网络优化的创新技术及PyTorch使用指南
深度学习近年来在多个领域取得了显著进展,但其核心组件——人工神经元和反向传播算法自提出以来鲜有根本性突破。穿孔反向传播(Perforated Backpropagation)技术通过引入“树突”机制,模仿生物神经元的计算能力,实现了对传统神经元的增强。该技术利用基于协方差的损失函数训练树突节点,使其能够识别神经元分类中的异常模式,从而提升整体网络性能。实验表明,该方法不仅可提高模型精度(如BERT模型准确率提升3%-17%),还能实现高效模型压缩(参数减少44%而无性能损失)。这一革新为深度学习的基础构建模块带来了新的可能性,尤其适用于边缘设备和大规模模型优化场景。
210 16
Perforated Backpropagation:神经网络优化的创新技术及PyTorch使用指南
|
5月前
|
监控 算法 JavaScript
基于 JavaScript 图算法的局域网网络访问控制模型构建及局域网禁止上网软件的技术实现路径研究
本文探讨局域网网络访问控制软件的技术框架,将其核心功能映射为图论模型,通过节点与边表示终端设备及访问关系。以JavaScript实现DFS算法,模拟访问权限判断,优化动态策略更新与多层级访问控制。结合流量监控数据,提升网络安全响应能力,为企业自主研发提供理论支持,推动智能化演进,助力数字化管理。
131 4
|
6月前
|
存储 双11 数据中心
数据中心网络关键技术,技术发明一等奖!
近日,阿里云联合清华大学与中国移动申报的“性能可预期的大规模数据中心网络关键技术与应用”项目荣获中国电子学会技术发明一等奖。该项目通过端网融合架构,实现数据中心网络性能的可预期性,在带宽保障、时延控制和故障恢复速度上取得重大突破,显著提升服务质量。成果已应用于阿里云多项产品及重大社会活动中,如巴黎奥运会直播、“双十一”购物节等,展现出国际领先水平。
|
6月前
|
安全 网络安全 定位技术
网络通讯技术:HTTP POST协议用于发送本地压缩数据到服务器的方案。
总的来说,无论你是一名网络开发者,还是普通的IT工作人员,理解并掌握POST方法的运用是非常有价值的。它就像一艘快速,稳定,安全的大船,始终为我们在网络海洋中的冒险提供了可靠的支持。
198 22

热门文章

最新文章