Java 网络编程初探
Java 网络编程
网络编程
网络编程:进行服务器端与客户端编程的开发操作实现。
java.net:网络操作包
B/S结构:
- 浏览器/服务器模式(Browser/Server)
- 不在开发客户端代码
- 开发一套服务器端的程序代码
- 客户端利用浏览器进行访问
- 维护方便,安全性能低(使用公共的HTTP协议和80端口)
- 不在开发客户端代码
C/S结构:
客户端/服务器模式(Client / Server)
需要编写两套程序:
- 客户端程序代码
- 服务器程序代码
C/S的开发非常的繁琐,因为开发人员需要维护两套程序。(运维哭)
优点:安全性能高;使用的是自己的连接端口、通信协议
TCP程序:
- 面向连接的可靠性传输
UDP程序:
- 面向无连接的不可靠的传输
C/S_ 网络程序
核心开发类:
- 服务端类:ServerSocket
- 工作在服务器端,用于接收用户的请求
- 客户端类:Socket
- 每一个连接到服务器端上的用户都通过Socket表示
ServerSocket:服务器端
public class ServerSocket
extends Object
implements Closeable
- 构造方法:
public ServerSocket(int port) throws IOException;
参数:port ==> 设置监听信息包的端口号
- 接收连接(来自客户端的连接)(Socket类定义的方法)
public Socket accept() throws IOException;
- 设置输出数据(Socket类定义的方法;套接字的输出流)
public OutputStream getOutputStream() throws IOException;
Socket:客户端
public class Socket
extends Object
implements Closeable
- 构造方法
public Socket(String host , int port);
连接主机的IP或域名(本机:localhost/127.0.0.1),并定义通信端口号port
套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。
- 得到输入数据(套接字的输入流)
public InputStream getInputStream();
- 设置输出数据(Socket类定义的方法;套接字的输出流)
public OutputStream getOutputStream() throws IOException;
套接字的输入输出流:在客户端套接字的输入流获取服务端的套接字的输出流
开发实例
- 服务器端:Server
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
// c/s ==> 服务端
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(1024);// 端口号 port
// 连接客户端
System.out.println(">>> 等待客户端连接 ... <<<");
Socket client = server.accept();//等待客户端发来连接请求
PrintStream out = new PrintStream(client.getOutputStream());
// 利用打印流完成输出,向客户端输出信息;
// client.getOutputStream()返回的是输出流的对象
out.println("Hello,World!");
out.close();
client.close();
server.close();
}
}
- 客户端:Client
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
// c/s ==> 客户端
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket client = new Socket("localhost",1024); // 连接服务端
// 取得客户端的输入数据流对象 ==> 接收来自服务器端的输出信息(流)
Scanner scan = new Scanner(client.getInputStream());
// client.getInputStream()返回的是输入流的对象
scan.useDelimiter("\n");
if (scan.hasNext()) {
System.out.println(scan.next());
}
scan.close();
client.close();
}
}
Echo 程序开发模型(经典案例)
客户端随意的向服务器端输送信息,服务端接收信息后,在信息前面加上 “ECHO” 标记后返回。
- 服务端
public class EchoServer {
public static void main(String [] args) throws Exception{
ServerSocket server = new ServerSocket(512);
Socket client = server.accept();//接收客户端的连接
Scanner scan = new Scanner(client.getInputStream());//接收套接字输入流(对象)
PrintStream out = new PrintStream(client.getOutputStream());//设置套接字输出流(对象)
scan.useDelimiter("\n");
System.out.println(">>> 连接准备 <<<");
boolean flag = true ; //控制连接的结束
while (flag) {
if (scan.hasNext()) {
String str = scan.next() ; //客户端发送的内容
if (str.equalsIgnoreCase("bye")) {
flag = false;
out.println("bye!");
} else {
out.println("ECHO:" + str);
}
}
}
client.close();
out.close();
server.close();
scan.close();
}
}
- 客户端
public class EchoClient {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket client = new Socket("localhost",512);
Scanner scan = new Scanner(client.getInputStream());
PrintStream out = new PrintStream(client.getOutputStream());
Scanner in = new Scanner(System.in);// 利用扫描流从键盘输入
in.useDelimiter("\n");
scan.useDelimiter("\n");
boolean flag = true;
while (flag) {
if (in.hasNext()) {
String str = in.next();//获取数据(输入数据)
out.println(str);
if(str.equalsIgnoreCase("bye")) {
flag = false ;
}
if(scan.hasNext()) {
System.out.println(scan.next());
}
}
}
client.close();
scan.close();
out.close();
in.close();
}
}
服务开发的基础要素:网络支持类、IO、多线程
Java 网络编程初探的更多相关文章
- Java网络编程初探
IP地址案例 package ch17; import javax.swing.text.Style; import java.net.InetAddress; /** * Created by Ji ...
- 20145205 《Java程序设计》实验报告五:Java网络编程及安全
20145205 <Java程序设计>实验报告五:Java网络编程及安全 实验要求 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.客户端中输入明文,利用DES算法加密,D ...
- Java 网络编程学习总结
新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1] 网络编程认识 [2] TCP/IP编程 ...
- 20145212 实验五《Java网络编程》
20145212 实验五<Java网络编程> 一.实验内容 1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成 ...
- 20145213《Java程序设计》实验五Java网络编程及安全
20145213<Java程序设计>实验五Java网络编程及安全 实验内容 1.掌握Socket程序的编写. 2.掌握密码技术的使用. 3.设计安全传输系统. 实验预期 1.客户端与服务器 ...
- 20145206《Java程序设计》实验五Java网络编程及安全
20145206<Java程序设计>实验五 Java网络编程及安全 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验步骤 我和201451 ...
- 20145337实验五Java网络编程及安全
20145337实验五Java网络编程及安全 实验内容 掌握Socket程序的编写 掌握密码技术的使用 设计安全传输系统 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器 ...
- java 网络编程复习(转)
好久没有看过Java网络编程了,现在刚好公司有机会接触,顺便的拾起以前的东西 参照原博客:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942 ...
- JAVA课程实验报告 实验五 Java网络编程及安全
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:韩玉琪 学号:20135317 成绩: 指导教师:娄嘉 ...
随机推荐
- FCC---CSS Flexbox: Align Elements Using the justify-content Property
Sometimes the flex items within a flex container do not fill all the space in the container. It is c ...
- GPS NMEA-0183标准详解
NMEA - 0183 是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备制定的标准格式.目前业已成了 GPS/北斗导航设备统一的 ...
- 服务器(VPS)被墙怎么办?
比如开发接口用的临时服务器被墙,就可以使用以下方法之一. 方法一(推荐) 为你的服务器分配一个浮动IP 等于给你的 droplet 增加一个新的 ip,我们以后访问这个新的ip就ok了. 直到下一次被 ...
- github克隆项目缓慢
github浏览或者克隆项目的时候,总是十分缓慢,下面是亲自自测的一种方式,克隆速度可以稍快一些 第一步 访问域名解析网站:https://www.ipaddress.com/ 在网页下方可以看见一个 ...
- 云原生技术之Docker入门
1. 为什么需要容器? 下图是一个比较传统的软件架构 做过java的同学可能对上图的架构方式比较了解,我们通常会将一个应用程序生成一个war包,放到一个tomcat容器当中并在一台虚拟机(VM)中启动 ...
- <计算机系统结构中的8个伟大思想>
摘自<计算机组成与设计>戴维帕森 ——面向摩尔定律的设计 ——使用抽象简化设计 ——加速大概率事件 ——通过并行提高性能 ——通过流水线提高性能 ——存储器层次 ——通过冗余提高可靠性
- (2018版)webstorm的安装和破解
前言 相信使用HBuildX的各位都用过,所以这个webstorm就是用来代替的. 因为使用方式跟idea等软件差不多,如果习惯了idea的操作方式的可以试一试 安装webstorm 这是2018版的 ...
- 使用create-react-app+react-router-dom+axios+antd+react-redux构建react项目
1.安装.构建 # 全局安装 npm install -g create-react-app # 构建一个my-app的项目 npx create-react-app my-app cd my-app ...
- 了解Bootstrap和开发响应式网站
什么是Bootstrap? Bootstrap是Twitter推出的一个开源的用于web前端开发的工具包.它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CS ...
- iOS 中使用 webSocket
iOS 中使用 webSocket 是服务器和app之间的一种通信方式 webSocket 实现了服务端推机制(主动向客户端发送消息).新的 web 浏览器全都支持 WebSocket,这使得它的使用 ...