网络编程技术

本文涉及的产品
系统运维管理,不限时长
简介: 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();
    }
  }
}
目录
相关文章
|
9天前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
38 11
|
1月前
|
人工智能 安全 算法
利用AI技术提升网络安全防御能力
【10月更文挑战第42天】随着人工智能技术的不断发展,其在网络安全领域的应用也日益广泛。本文将探讨如何利用AI技术提升网络安全防御能力,包括异常行为检测、恶意软件识别以及网络攻击预测等方面。通过实际案例和代码示例,我们将展示AI技术在网络安全防御中的潜力和优势。
|
1月前
|
存储 安全 网络安全
云计算与网络安全:技术融合的双刃剑
【10月更文挑战第40天】本文将深入探讨云计算与网络安全之间的关系,揭示它们如何相互依赖又互相挑战。我们将从云计算的基本概念出发,逐步引入网络安全的重要性,并分析云服务在提供便利的同时可能带来的安全隐患。文章还将讨论信息安全的关键领域,如加密技术和身份验证机制,以及如何在云计算环境中加强这些安全措施。通过本文,读者将获得对云计算和网络安全复杂关系的深刻理解,并认识到在享受技术便利的同时,维护网络安全的重要性。
|
1天前
|
机器学习/深度学习 安全 网络安全
网络安全词云图与技术浅谈
### 网络安全词云图与技术浅谈 本文介绍了通过词云图展示网络安全关键术语的方法,并探讨了构建现代网络安全体系的关键要素。词云图利用字体大小和颜色突出高频词汇,如恶意软件、防火墙、入侵检测系统等。文中提供了生成词云图的Python代码示例,包括安装依赖库和调整参数。此外,文章详细讨论了恶意软件防护、加密技术、身份验证、DDoS防御、社会工程学防范及威胁情报等核心技术,强调了多层次、多维度的安全策略的重要性。
27 11
网络安全词云图与技术浅谈
|
21天前
|
存储 安全 网络安全
云计算与网络安全:技术融合的双刃剑
在数字化浪潮中,云计算如同一股不可阻挡的力量,推动着企业和个人用户步入一个高效、便捷的新时代。然而,随之而来的网络安全问题也如影随形,成为制约云计算发展的阿喀琉斯之踵。本文将探讨云计算服务中的网络安全挑战,揭示信息保护的重要性,并提供实用的安全策略,旨在为读者呈现一场技术与安全的较量,同时指出如何在享受云服务带来的便利的同时,确保数据的安全和隐私。
26 6
|
25天前
|
供应链 安全 物联网安全
NIST(美国国家标准与技术研究院)在网络安全领域进行了多项创新
NIST(美国国家标准与技术研究院)在网络安全领域进行了多项创新
46 10
|
20天前
|
存储 人工智能 安全
云计算与网络安全:技术融合与挑战
在数字化时代的浪潮中,云计算和网络安全已成为推动社会进步的两大关键技术。本文将探讨云计算服务的发展,网络安全的重要性,以及信息安全技术的演进。我们将通过实例分析,揭示云服务如何增强数据保护,网络安全措施如何应对新兴威胁,以及信息安全技术的创新如何为企业带来竞争优势。文章旨在为读者提供对云计算和网络安全领域的深入理解,并展示它们如何共同塑造我们的未来。
|
19天前
|
监控 安全 网络安全
云计算与网络安全:技术挑战与解决方案
随着云计算技术的飞速发展,其在各行各业的应用越来越广泛。然而,随之而来的网络安全问题也日益凸显。本文将从云服务、网络安全和信息安全等技术领域出发,探讨云计算面临的安全挑战及相应的解决方案。通过实例分析和代码示例,旨在帮助读者更好地理解云计算与网络安全的关系,提高网络安全防护意识。
|
22天前
|
存储 监控 安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的融合与挑战
本文将探讨云计算与网络安全之间的关系,以及它们在云服务、网络安全和信息安全等技术领域中的融合与挑战。我们将分析云计算的优势和风险,以及如何通过网络安全措施来保护数据和应用程序。我们还将讨论如何确保云服务的可用性和可靠性,以及如何处理网络攻击和数据泄露等问题。最后,我们将提供一些关于如何在云计算环境中实现网络安全的建议和最佳实践。
|
23天前
|
存储 安全 网络安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的融合与挑战
随着云计算技术的飞速发展,越来越多的企业和个人开始使用云服务。然而,云计算的广泛应用也带来了一系列网络安全问题。本文将从云服务、网络安全、信息安全等方面探讨云计算与网络安全的关系,分析当前面临的挑战,并提出相应的解决方案。
53 3