我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java TCP编程之Scoket是什么及怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java TCP编程之Scoket是什么及怎么使用

今天小编给大家分享一下Java TCP编程之Scoket是什么及怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一、什么是Scoket

Socket 是一个抽象概念,一个应用程序通过一个 Socket 来建立一个远程连接,而 Socket 内部通 过 TCP/IP 协议把数据传输到网络。

┌───────────┐                                   ┌───────────┐
│Application│                                   │Application│
├───────────┤                                   ├───────────┤
│  Socket   │                                   │  Socket   │
├───────────┤                                   ├───────────┤
│    TCP    │                                   │    TCP    │
├───────────┤      ┌──────┐       ┌──────┐      ├───────────┤
│    IP     │<────>│Router│<─────>│Router│<────>│    IP     │
└───────────┘      └──────┘       └──────┘      └───────────┘

Socket 、 TCP 和部分 IP 的功能都是由操作系统提供的,不同的编程语言只是提供了对操作系统调 用的简单的封装。例如, Java 提供的几个 Socket 相关的类就封装了操作系统提供的接口: Server Socket 类、 Socket 类。

为什么需要 Socket 进行网络通信?因为仅仅通过 IP 地址进行通信是不够的,同 一台计算机同一时间会运行多个网络应用程序,例如浏览器、QQ、邮件客户端等。当 操作系统接收到一个数据包的时候,如果只有 IP 地址,它没法判断应该发给哪个应用 程序,所以,操作系统抽象出 Socket 接口,每个应用程序需要各自对应到不同的 S ocket ,数据包才能根据 Socket 正确地发到对应的应用程序。

一个 Socket 就是由IP地址和端口号(范围是0~65535)组成,可以把 Socket 简单理解为 IP 地址加端口号。端口号总是由操作系统分配,它是一个 0 ~ 65535 之间的数字,其中,小于 1024 的端口属于特权端口,需要管理员权限,大于 1024 的端口可以由任意用户的应用程序打开。

使用 Socket 进行网络编程时,本质上就是两个进程之间的网络通信。其中一个进 程必须充当服务器端,它会主动监听某个指定的端口,另一个进程必须充当客户端,它 必须主动连接服务器的 IP 地址和指定端口,如果连接成功,服务器端和客户端就成功 地建立了一个 TCP 连接,双方后续就可以随时发送和接收数据。

当 Socket 连接成功地在服务器端和客户端之间建立后:

  • 对服务器端来说,它的 Socket 是指定的 IP 地址和指定的端口号;

  • 对客户端来说,它的 Socket 是它所在计算机的 IP 地址和一个由操作系统分配的随机端口号。

二、服务器端

package com.ljl.tcp.demo2;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.Writer;import java.net.ServerSocket;import java.net.Socket;import java.util.HashMap;import java.util.Map;public class ChatServer {public static void main(String[] args) {Map<String, String> chatMap = new HashMap<String, String>(){{put("你好", "你好呀");put("hi", "hi~");put("hello", "哈喽");put("吃了吗", "没呢,你呢");put("孤勇者", "爱你孤身走暗巷");put("有请潘周聃", "潘周聃,今年29岁,苏黎世理工大学.....");put("很高兴认识你", "我也是哦");}};try (ServerSocket server = new ServerSocket(9966)) {while(true) {//客户端连接Socket client = server.accept();//获取客户端IP地址String clientIP = client.getInetAddress().getHostAddress();try(BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));){//获取客户端提问String question = reader.readLine();System.out.println("服务器来自客户端"+clientIP+"的提问:"+question);//获取问题答案String answer = chatMap.get(question);answer = answer == null?"我不知道你在说啥":answer;//发送答案至客户端writer.write(answer);}}} catch (IOException e) {e.printStackTrace();}}}

三、客户端

package com.ljl.tcp.demo2;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.Socket;import java.util.Scanner;public class ChatClient {public static void main(String[] args) {Scanner input = new Scanner(System.in);while(true) {try (//创建Socket Socket client = new Socket("192.168.254.163",9966);BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));){//获取控制台的输入问题String question = input.nextLine();if(question.equals("退下")) {break;}//发送问题至服务器writer.write(question);writer.flush();//暂时结束本次输入client.shutdownOutput();//获取来自服务器的答案String answer = reader.readLine();System.out.println("服务器回答:"+answer);} catch (IOException e) {e.printStackTrace();}}System.out.println("over");}}

Java TCP编程之Scoket是什么及怎么使用

四、Socket流

当 Socket 连接创建成功后,无论是服务器端,还是客户端,我们都使用 Socket 实例进行网络通信。因为 T CP 是一种基于流的协议,因此, Java 标准库使用 InputStream 和 OutputStream 来封装 Socket 的数据流,这 样我们使用 Socket 的流,和普通 IO 流类似:

// 用于读取网络数据:InputStream in = sock.getInputStream();// 用于写入网络数据:OutputStream out = sock.getOutputStream();

写入网络数据时,必须要调用 flush() 方法。如果不调用 flush() ,我们很可能会发现,客户端和服务器都 收不到数据,这并不是 Java 标准库的设计问题,而是我们以流的形式写入数据的时候,并不是一写入就立刻发送 到网络,而是先写入内存缓冲区,直到缓冲区满了以后,才会一次性真正发送到网络,这样设计的目的是为了提高 传输效率。如果缓冲区的数据很少,而我们又想强制把这些数据发送到网络,就必须调用 flush() 强制把缓冲区数 据发送出去。

以上就是“Java TCP编程之Scoket是什么及怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java TCP编程之Scoket是什么及怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java TCP编程之Scoket是什么及怎么使用

今天小编给大家分享一下Java TCP编程之Scoket是什么及怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、什
2023-07-04

Java NIO是什么及怎么使用

Java NIO(New IO)是Java 1.4版本中引入的一种用于替代传统Java IO的新的输入输出API。NIO提供了更高效、更灵活的IO操作方式,并且支持非阻塞IO模型。Java NIO的核心概念是通道(Channel)和缓冲区(
2023-09-27

Linux之UDP协议及编程流程是什么

这篇文章主要讲解了“Linux之UDP协议及编程流程是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux之UDP协议及编程流程是什么”吧!UDP协议的特点UDP 不提供可靠性的传输
2023-07-05

Java之System.getProperty()的作用及使用方法是什么

今天小编给大家分享一下Java之System.getProperty()的作用及使用方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一
2023-07-05

Java响应式编程之handle怎么使用

这篇文章主要介绍“Java响应式编程之handle怎么使用”,在日常操作中,相信很多人在Java响应式编程之handle怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java响应式编程之handle怎
2023-07-04

Java线程池实现原理是什么及怎么使用

这篇文章主要讲解了“Java线程池实现原理是什么及怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java线程池实现原理是什么及怎么使用”吧!1. 为什么要使用线程池使用线程池通常由以
2023-07-04

Java编程内功之怎么使用单链表

这篇文章将为大家详细讲解有关Java编程内功之怎么使用单链表,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 基本介绍链表是有序的列表,但是它在内存中存储如下鸿蒙官方战略合作共建——Harmo
2023-06-15

Java并发编程之LinkedBlockingQueue队列怎么使用

这篇文章主要介绍了Java并发编程之LinkedBlockingQueue队列怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java并发编程之LinkedBlockingQueue队列怎么使用文章都会有
2023-06-30

Reactive反应式编程是什么及如何使用

这篇文章主要介绍了Reactive反应式编程是什么及如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Reactive反应式编程是什么及如何使用文章都会有所收获,下面我们一起来看看吧。反应式编程简介Reac
2023-06-29

JAVA之Socket编程方法怎么用

这篇文章主要介绍了JAVA之Socket编程方法怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JAVA之Socket编程方法怎么用文章都会有所收获,下面我们一起来看看吧。一、Socket知识1. Sock
2023-07-04

java读写锁怎么使用及优点是什么

这篇文章主要介绍了java读写锁怎么使用及优点是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java读写锁怎么使用及优点是什么文章都会有所收获,下面我们一起来看看吧。前言:读写锁(Readers-Writ
2023-06-30

Java中ThreadLocal的原理是什么及怎么使用

这篇文章主要介绍“Java中ThreadLocal的原理是什么及怎么使用”,在日常操作中,相信很多人在Java中ThreadLocal的原理是什么及怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Jav
2023-07-06

​thrift是什么及怎么使用

Thrift是一个软件框架,用于跨语言的服务开发。它由Apache软件基金会开发和维护,旨在帮助开发人员编写高效和可扩展的客户端-服务器应用程序。Thrift允许开发人员定义数据类型和服务接口,并自动生成用于不同编程语言的代码。开发人员可
2023-10-21

jQuery是什么及怎么使用

这篇文章主要介绍“jQuery是什么及怎么使用”,在日常操作中,相信很多人在jQuery是什么及怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”jQuery是什么及怎么使用”的疑惑有所帮助!接下来,请跟
2023-07-05

JumpServer是什么及怎么使用

JumpServer是一款开源的堡垒机软件,用于管理和控制服务器远程访问权限。它可以帮助管理员集中管理服务器账号和权限,实现对服务器的安全访问控制。使用JumpServer,管理员可以通过Web界面添加服务器和账号,然后将授权给用户或用户
2023-10-23

Vuex是什么及怎么使用

这篇文章主要讲解了“Vuex是什么及怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vuex是什么及怎么使用”吧!一.Vuex是什么?为什么要用它?vuex官方解释Vuex 是一个专为
2023-07-04

ChatGPT是什么及怎么使用

这篇“ChatGPT是什么及怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ChatGPT是什么及怎么使用”文章吧。C
2023-07-04

LINQ是什么及怎么使用

本文小编为大家详细介绍“LINQ是什么及怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“LINQ是什么及怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、为什么要使用LINQ要理解为什么使用LIN
2023-06-29

JSONObject是什么及怎么使用

JSONObject是Java中的一个类,它可以用来表示一个JSON对象。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前后端数据的传输和存储。使用JSONObject类,可以方便地创建、
2023-09-12

Mybatis是什么及怎么使用

这篇文章主要介绍“Mybatis是什么及怎么使用”,在日常操作中,相信很多人在Mybatis是什么及怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mybatis是什么及怎么使用”的疑惑有所帮助!接下来
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录