IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Java利用socket和I/O实现客户端服务器之间通信 -> 正文阅读

[网络协议]Java利用socket和I/O实现客户端服务器之间通信

此篇博客记录目的:
1、实现几个客户端和服务端之间通信的代码
2、其中涉及到的一些没有记录的知识
计算机网络的知识(TCP/IP传输协议,IP地址,端口号等)参考博客:TCP/IP传输协议
java I/O输入输出流 :参考博客:Java 流(Stream)、文件(File)和IO
Socket的各种API 参考博客:Java 网络编程

一、 Java利用socket实现客户端给服务器发送消息

1】代码及运行结果

Client.java :

插播一个给纯小白们的编程tip :简单体现了一下代码书写过程:(先写try-catch,再填细节)

import java.io.*;
import java.net.*;
public class Client {
    public static void main(String[] args) {
        try{
            
        }catch(UnknownHostException e){
            e.printStackTrace();
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

给纯纯纯白们的 编程过程中小tip:(此时IDEA会报错never throw that catch,没关系不用管把上面的try写完了就好了)

完整代码如下:

import java.io.*;
import java.net.*;
public class Client {
    public static void main(String[] args) {
        try{
            //发送到8888端口
            Socket socket = new Socket("127.0.0.1", 8888);
            //输出流
            OutputStream outputStream = socket.getOutputStream();
            PrintWriter printWriter = new PrintWriter(outputStream);
            printWriter.write("服务端你好,我是客户端");
            printWriter.flush();
            //关闭资源
            printWriter.close();
            outputStream.close();
            socket.close();

        }catch(UnknownHostException e){
            e.printStackTrace();
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

Server.java:

import java.io.*;
import java.net.*;

public class Server{
    public static void main(String[] args) {
        try{
            ServerSocket serverSocket = new ServerSocket(8888);
            System.out.println("---------------------服务端执行,开始监听请求-----------------");

            Socket socket = serverSocket.accept();//阻塞进程,开始监听
            InputStream inputStream = socket.getInputStream();
            //获取请求内容
            String info;
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            while((info = bufferedReader.readLine()) != null){
                System.out.println("我是服务端,客户端请求为:" + info);
            }
            //关闭资源
            socket.shutdownInput();
            bufferedReader.close();
            inputStream.close();
            socket.close();
            serverSocket.close();

        }catch(Exception exception){
            exception.printStackTrace();
        }
    }
}

在IDEA中运行:
先运行Server.java

再运行client.java

此时Server的运行结果变为:

2】过程描述

1、socket简述:
(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中

socket是一个中间层工具,它存在于操作系统的内核

电脑上的进程为了真正通过socket来发送/接受数据,socket必须和一个能够进行数据传送的接口连接起来,再通过那个接口送出数据。这个接口就是端口,而这个连接的过程就叫做绑定bind。
应用层就可以和传输层通过套接字接口(API),区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

(图片来自网上)

2、理解这段话:以上面的程序为例
java中Socket的API在java.net 包中

import java.net.*;

客户端,Socket:

Socket socket = new Socket(“127.0.0.1”, 8888);

服务端, ServerSocket:

ServerSocket serverSocket = new ServerSocket(8888);

上面说到socket必须和一个能够进行数据传送的接口连接起来,再通过那个接口送出数据。这个接口就是端口,而这个连接的过程就叫做绑定bind。,这里“8888”就是端口号,"127.0.0.1"为IP地址。粗略的说一个Socket是一对IP地址和端口。

io输入输出流也可以换成NIO,BIO,AIO,Netty等

3、理解上面的两个程序Client.java 和 Server.java:
在这里插入图片描述
图片来源:参考博客1

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 11:12:15  更:2021-09-10 11:14:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/27 1:48:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码