Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java 网络编程初探

Java 网络编程初探

作者头像
Mirror王宇阳
发布于 2020-11-10 15:09:00
发布于 2020-11-10 15:09:00
45900
代码可运行
举报
运行总次数:0
代码可运行

Java 网络编程

网络编程

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

B/S结构:

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

C/S结构:

  • 客户端/服务器模式(Client / Server)
    • 需要编写两套程序:
      • 客户端程序代码
      • 服务器程序代码
    • C/S的开发非常的繁琐,因为开发人员需要维护两套程序。(运维哭)
    • 优点:安全性能高;使用的是自己的连接端口、通信协议
TCP程序:
  • 面向连接的可靠性传输
UDP程序:
  • 面向无连接的不可靠的传输

C/S_ 网络程序

核心开发类:

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

ServerSocket:服务器端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ServerSocket
extends Object
implements Closeable
  • 构造方法:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public ServerSocket(int port) throws IOException;

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

  • 接收连接(来自客户端的连接)(Socket类定义的方法)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public Socket accept() throws IOException;
  • 设置输出数据(Socket类定义的方法;套接字的输出流)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public OutputStream getOutputStream() throws IOException;

Socket:客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Socket
extends Object
implements Closeable
  • 构造方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public Socket(String host , int port);

连接主机的IP或域名(本机:localhost/127.0.0.1),并定义通信端口号port 套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。

  • 得到输入数据(套接字的输入流)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public InputStream getInputStream();
  • 设置输出数据(Socket类定义的方法;套接字的输出流)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public OutputStream getOutputStream() throws IOException;

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

开发实例

  • 服务器端:Server
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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” 标记后返回。

  • 服务端
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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();
	}
}
  • 客户端
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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、多线程

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
模仿echo命令学习BIO——Java实现
在程序的开发之中Java里面最小的处理单元就是线程,也就是说每一个线程可以进行IO的处理,在处理之中,该线程无法进行任何的其他操作。 . 多线程是不可能无限制进行创造的,所以需要去考虑堆线程进行有效的个数控制。如果产生的线程过多,那么直接的问题在于,处理性能降低 ,响应的速度变慢。 需要去区分操作系统的内核线程,以及用户线程的区别,所以最好与内核线程有直接联系,需要使用到固定线程池。
MickyInvQ
2020/09/27
8330
模仿echo命令学习BIO——Java实现
Java中的网络编程
​  Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的   C/S程序应用:客户/服务器模式,如QQ客户端,客户端连到服务器上,一个C/S模式的应用必须有两套程序,一个是客户端的程序,一个是服务器程序。   B/S程序应用:浏览器/服务器模式,如当下的各种网站都是B/S模式,所有的程序代码都在服务器上,用户通过浏览器去访问。 C/S程序分为两种:         基于TCP协议:Socket(套接字), 可靠
lizelu
2018/01/12
8360
Java—网络编程
1)IP地址:唯一标识网络上的每一台计算机,两台计算机之间通信的必备要素。 2)端口号:计算机中应用的标号(代表一个应用程序),0-1024系统使用或保留端口,端口号占2个字节,所以有效端口0-65535. 3)通信协议:通信的规则TCP,UDP 4)注意:在通信协议相同的情况下,端口号才是唯一的。
全栈程序员站长
2022/09/08
2.4K0
Java—网络编程
JAVA入门学习十一
网络编程三要素:IP / 端口(Port) / 协议(protocol) 补充知识: 3G/4G 通过信号塔,有的信号塔连接的是卫星通信;
全栈工程师修炼指南
2020/10/23
3780
JAVA入门学习十一
JDK1.9-TCP通信程序
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/12/10
4290
JDK1.9-TCP通信程序
你对Java网络编程了解的如何?Java BIO 网络编程 | Netty 前期知识
引入: 随着技术的发展,两个或以上的程序必然需要进行交互,于是提供了一种端到端的通信,相当于对传输层的一种封装,对于开发人员而言隐藏了传输的细节,将这些固定的“套路”抽象出来,提供一种端到端的通信,可以使我们更加专注于业务的开发。而BIO只是其中一种。
宁在春
2022/10/31
3010
你对Java网络编程了解的如何?Java BIO 网络编程 | Netty 前期知识
接地气讲解TCP协议和网络程序设计(深度好文)
教科书的理解是这样的,它提供两台计算机之间可靠的数据传送,可以保证数据从一端发送到另一端接收时,数据能准确送达(那就是可靠的意思),而且抵达的数据的排列顺序和送出的顺序相同。教科书果然是教科书啊,听了半天,啥也没懂。
张晓衡
2019/11/08
6330
接地气讲解TCP协议和网络程序设计(深度好文)
JAVASocket实现聊天室「建议收藏」
socket本质上是两个端点之间的通信桥梁,两个端点相互连接,并且打开远程之间的网络IO,从而可以像对本地文件读写一样,JAVA对socket编程有着友好的支持,并且针对客户端和服务端抽象了不同的服务对象
全栈程序员站长
2022/07/02
3070
JAVASocket实现聊天室「建议收藏」
大数据必学Java基础(八十一):基于TCP的网络编程
​基于TCP的网络编程功能:模拟网站的登录,客户端录入账号密码,然后服务器端进行验证。一、功能分解1:单向通信功能:客户端发送一句话到服务器客户端:public class TestClient {//客户端 //这是一个main方法,是程序的入口: public static void main(String[] args) throws IOException { //1.创建套接字:指定服务器的ip和端口号: Socket s = new Socket("192
Lansonli
2022/11/10
4010
大数据必学Java基础(八十一):基于TCP的网络编程
java-网络编程
这个类主要用来表示IP地址,有两个子类:Inet4Address和Inet6Address
luxuantao
2021/02/24
3490
网络编程
TCP编程中,如果要完成通信,通信双方必须要创建 socket,通过 socket 完成通信。
Carlos Ouyang
2019/08/19
5440
网络编程
【Java】网络编程
B/S结构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。
陶然同学
2023/02/27
8220
【Java】网络编程
Java网络编程:TCP的socket编程
协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构、交换方式、包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP协议族有IP协议、TCP协议和UDP协议。现在TCP/IP协议族中的主要socket类型为流套接字(使用TCP协议)和数据报套接字(使用UDP协议)。
全栈程序员站长
2022/09/08
7010
Java之网络编程(一)
使用循环虽然可以让服务器处理多个客户端请求。但是还是无法同时跟多个客户端进行通信。
楠羽
2022/11/18
5960
Java之网络编程(一)
程序员必备课程——网络编程入门
关键字:互联网协议,网络分层,socket,TCP/IP协议,jdk源码,多线程,线程池,ExecutorService 本文的主要目的是面向程序员,所以涉及到程序编码上面比较多的是TCP/IP协议以及Socket协议,这里会重点介绍,而在学习这两个协议之前,对于整个互联网的运行原理要了解熟悉,所以会先快速过一遍互联网协议。 互联网协议(Internet Protocol Suite) 首先,根据各种信息的总结,这里我们将互联网协议分为五层,自上而下分别是应用层,传输层,网络层,链接层,实体层。下面我
文彬
2018/05/08
1.3K0
Java网络编程
通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信。这就好比在道路中行驶的汽车一定要遵守交通规则一样,协议中对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守,最终完成数据交换。
訾博ZiBo
2025/01/06
1080
Java网络编程
Java TCP程序设计示例
客户端套接字 Socket(String host, int port)           创建一个流套接字并将其连接到指定主机上的指定端口号。 OutputStream getOutputStream()           返回此套接字的输出流。 InputStream getInputStream()           返回此套接字的输入流。 服务器套接字 ServerSocket(int port)           创建绑定到特定端口的服务器套接字。 Sock
用户2965768
2019/03/20
8900
网络编程笔记
先运行Demo2_Receive,再运行Demo2_Send,运行Demo2_Send发送消息能在另一个创建口接收到。
砖业洋__
2023/05/06
2390
网络编程笔记
网络编程
软件结构 C/S 和 B/S 网络通信协议 协议就是个规则 网络通信协议的分类 UDP TCP/IP 端口号
全栈程序员站长
2021/05/20
5010
Java 网络编程
1.获取主机名,IP地址 public static void main(String[] args) throws UnknownHostException { InetAddress adress = InetAddress.getByName("n"); String ipname = adress.getHostAddress(); String Hostname = adress.getHostName();
Tim在路上
2020/08/04
1K0
相关推荐
模仿echo命令学习BIO——Java实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验