Java 网络编程

网络编程

  • 网络编程:进行服务器端与客户端编程的开发操作实现。

  • java.net:网络操作包

B/S结构:

  • 浏览器/服务器模式(Browser/Server)

    • 不在开发客户端代码

      • 开发一套服务器端的程序代码
      • 客户端利用浏览器进行访问
    • 维护方便,安全性能低(使用公共的HTTP协议和80端口)

C/S结构:

  • 客户端/服务器模式(Client / Server)

    • 需要编写两套程序:

      • 客户端程序代码
      • 服务器程序代码
    • C/S的开发非常的繁琐,因为开发人员需要维护两套程序。(运维哭)

    • 优点:安全性能高;使用的是自己的连接端口、通信协议

TCP程序:

  • 面向连接的可靠性传输

UDP程序:

  • 面向无连接的不可靠的传输

C/S_ 网络程序

核心开发类:

  • 服务端类:ServerSocket

    • 工作在服务器端,用于接收用户的请求
  • 客户端类:Socket
    • 每一个连接到服务器端上的用户都通过Socket表示

ServerSocket:服务器端

  1. public class ServerSocket
  2. extends Object
  3. implements Closeable
  • 构造方法:
  1. public ServerSocket(int port) throws IOException;

参数:port ==> 设置监听信息包的端口号

  • 接收连接(来自客户端的连接)(Socket类定义的方法)
  1. public Socket accept() throws IOException;
  • 设置输出数据(Socket类定义的方法;套接字的输出流)
  1. public OutputStream getOutputStream() throws IOException;

Socket:客户端

  1. public class Socket
  2. extends Object
  3. implements Closeable
  • 构造方法
  1. public Socket(String host , int port);

连接主机的IP或域名(本机:localhost/127.0.0.1),并定义通信端口号port

套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。

  • 得到输入数据(套接字的输入流)
  1. public InputStream getInputStream();
  • 设置输出数据(Socket类定义的方法;套接字的输出流)
  1. public OutputStream getOutputStream() throws IOException;

套接字的输入输出流:在客户端套接字的输入流获取服务端的套接字的输出流

开发实例

  • 服务器端:Server
  1. import java.io.IOException;
  2. import java.io.PrintStream;
  3. import java.net.ServerSocket;
  4. import java.net.Socket;
  5. // c/s ==> 服务端
  6. public class Server {
  7. public static void main(String[] args) throws IOException {
  8. ServerSocket server = new ServerSocket(1024);// 端口号 port
  9. // 连接客户端
  10. System.out.println(">>> 等待客户端连接 ... <<<");
  11. Socket client = server.accept();//等待客户端发来连接请求
  12. PrintStream out = new PrintStream(client.getOutputStream());
  13. // 利用打印流完成输出,向客户端输出信息;
  14. // client.getOutputStream()返回的是输出流的对象
  15. out.println("Hello,World!");
  16. out.close();
  17. client.close();
  18. server.close();
  19. }
  20. }
  • 客户端:Client
  1. import java.io.IOException;
  2. import java.net.Socket;
  3. import java.net.UnknownHostException;
  4. import java.util.Scanner;
  5. // c/s ==> 客户端
  6. public class Client {
  7. public static void main(String[] args) throws UnknownHostException, IOException {
  8. Socket client = new Socket("localhost",1024); // 连接服务端
  9. // 取得客户端的输入数据流对象 ==> 接收来自服务器端的输出信息(流)
  10. Scanner scan = new Scanner(client.getInputStream());
  11. // client.getInputStream()返回的是输入流的对象
  12. scan.useDelimiter("\n");
  13. if (scan.hasNext()) {
  14. System.out.println(scan.next());
  15. }
  16. scan.close();
  17. client.close();
  18. }
  19. }

Echo 程序开发模型(经典案例)

客户端随意的向服务器端输送信息,服务端接收信息后,在信息前面加上 “ECHO” 标记后返回。

  • 服务端
  1. public class EchoServer {
  2. public static void main(String [] args) throws Exception{
  3. ServerSocket server = new ServerSocket(512);
  4. Socket client = server.accept();//接收客户端的连接
  5. Scanner scan = new Scanner(client.getInputStream());//接收套接字输入流(对象)
  6. PrintStream out = new PrintStream(client.getOutputStream());//设置套接字输出流(对象)
  7. scan.useDelimiter("\n");
  8. System.out.println(">>> 连接准备 <<<");
  9. boolean flag = true ; //控制连接的结束
  10. while (flag) {
  11. if (scan.hasNext()) {
  12. String str = scan.next() ; //客户端发送的内容
  13. if (str.equalsIgnoreCase("bye")) {
  14. flag = false;
  15. out.println("bye!");
  16. } else {
  17. out.println("ECHO:" + str);
  18. }
  19. }
  20. }
  21. client.close();
  22. out.close();
  23. server.close();
  24. scan.close();
  25. }
  26. }
  • 客户端
  1. public class EchoClient {
  2. public static void main(String[] args) throws UnknownHostException, IOException {
  3. Socket client = new Socket("localhost",512);
  4. Scanner scan = new Scanner(client.getInputStream());
  5. PrintStream out = new PrintStream(client.getOutputStream());
  6. Scanner in = new Scanner(System.in);// 利用扫描流从键盘输入
  7. in.useDelimiter("\n");
  8. scan.useDelimiter("\n");
  9. boolean flag = true;
  10. while (flag) {
  11. if (in.hasNext()) {
  12. String str = in.next();//获取数据(输入数据)
  13. out.println(str);
  14. if(str.equalsIgnoreCase("bye")) {
  15. flag = false ;
  16. }
  17. if(scan.hasNext()) {
  18. System.out.println(scan.next());
  19. }
  20. }
  21. }
  22. client.close();
  23. scan.close();
  24. out.close();
  25. in.close();
  26. }
  27. }

服务开发的基础要素:网络支持类、IO、多线程

Java 网络编程初探的更多相关文章

  1. Java网络编程初探

    IP地址案例 package ch17; import javax.swing.text.Style; import java.net.InetAddress; /** * Created by Ji ...

  2. 20145205 《Java程序设计》实验报告五:Java网络编程及安全

    20145205 <Java程序设计>实验报告五:Java网络编程及安全 实验要求 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.客户端中输入明文,利用DES算法加密,D ...

  3. Java 网络编程学习总结

    新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1]    网络编程认识                [2]  TCP/IP编程 ...

  4. 20145212 实验五《Java网络编程》

    20145212 实验五<Java网络编程> 一.实验内容 1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成 ...

  5. 20145213《Java程序设计》实验五Java网络编程及安全

    20145213<Java程序设计>实验五Java网络编程及安全 实验内容 1.掌握Socket程序的编写. 2.掌握密码技术的使用. 3.设计安全传输系统. 实验预期 1.客户端与服务器 ...

  6. 20145206《Java程序设计》实验五Java网络编程及安全

    20145206<Java程序设计>实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 我和201451 ...

  7. 20145337实验五Java网络编程及安全

    20145337实验五Java网络编程及安全 实验内容 掌握Socket程序的编写 掌握密码技术的使用 设计安全传输系统 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器 ...

  8. java 网络编程复习(转)

    好久没有看过Java网络编程了,现在刚好公司有机会接触,顺便的拾起以前的东西 参照原博客:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942 ...

  9. JAVA课程实验报告 实验五 Java网络编程及安全

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

随机推荐

  1. JPA中实现双向一对一的关联关系

    场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...

  2. GPS NMEA-0183标准详解

    NMEA - 0183 是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备制定的标准格式.目前业已成了 GPS/北斗导航设备统一的 ...

  3. 使用VS2005编译安装openssl1.1.1c

    1.首先获取openssl源码包 openssl-1.1.1c.tar.gz: 2.安装 ActivePerl: 2.解压源码包,打开vs2005命令行工具,通过命令行进入openssl源码包根目录: ...

  4. Android 仿真器 无法启动排查

    从命令行启动仿真器,可以查看其输出. Microsoft Windows [版本 10.0.18362.145] (c) 2019 Microsoft Corporation.保留所有权利. C:\U ...

  5. Elon Mask 写作常见的三种错误

    (其实非常的文不对题,这篇文章和写作的并没有多大的关系,如果是想看关于写作的技巧,可以直接离开,节省您的时间) 这是原文 写作就是在把你自身的想法用正确,合适的方式表达出来,但是不正确的表达可能会导致 ...

  6. 【STM32H7教程】第34章 STM32H7的定时器应用之TIM1-TIM17的PWM实现

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第34章       STM32H7的定时器应用之TIM1-T ...

  7. C# 从字符串中提取指定字符类型的内容

    从一段字符串中,提取中文.英文.数字 中文字符30Margin中文字符40HorizontalAlignment 正则表达式: /// <summary> /// 英文字母与数字 /// ...

  8. 关于vue里的$refs属性

    vuejs的极大程度的帮助减少了对dom的操作,他主要通过添加ref属性,但是当获取this.$refs属性时,稍有不注意就会输出undefined导致我们对dom节点的操作报错. this.$ref ...

  9. Redis 到底是怎么实现“附近的人”这个功能的呢?

    作者简介 万汨,饿了么资深开发工程师.iOS,Go,Java均有涉猎.目前主攻大数据开发.喜欢骑行.爬山. 前言:针对“附近的人”这一位置服务领域的应用场景,常见的可使用PG.MySQL和MongoD ...

  10. katalon Studio之WebUi自动化测试视频教程持续更新

    通知...通知...通知... 为了更好的把katalon Studio自动化测试工具推广给大家,最近在B站中开通了视频专栏,地址如下: https://www.bilibili.com/video/ ...