socket编程:

一:什么是socket:socket是BSD UNIX的通信机制,通常称为“套接字”,其英文原意是“孔”或“插座”。有些顾名思义,socket正如其英文原意一样,像是一个多孔插座,可以提供多个端口的连接服务。为了更加直观的了解socket,可以用插座来比喻socket。如果说socket是一个多孔插座,插座是提供各种电器供电的地方,不同的电器工作时需要的电压和电流也不一样,但各种电器都有各自的一个插口,这个称之为“端口”。电器使用的电可以看做是网络资源或者是各种“流”,电是由电线传输过来的,所以插座需要连接电线,这里电线也就是服务器和客户端连接 “connection”。 其中初始化socket的过程像是买来一个插座的安装过程。

在插座这边的是“客户端”,电线那边提供电的发电厂是“服务器”。客户端和发电厂都各自拥有一个地址,即“IP地址”。其中还有一套传输和用电的规则,比如传输电时需要的电线多少伏才能满足需求,电器用电的技术参数,端口是几个孔的。这个是“协议”。正常情况下我们是不会去管协议的内容是什么,也就是说协议在我们面前是隐藏的。

以下是socket运作过程中所对应的网络中的各层,具体数据的在网络中的各层传输:

二.工作原理:对于服务器来说,服务器先初始化socket,然后端口绑定(bind),再对端口监听(listen),调用accept阻塞,等待客户端连接请求。对于客户端来说,客户端初始化socket,然后申请连接(connection)。客户端申请连接,服务器接受申请并且回复申请许可(这里要涉及TCP三次握手连接),然后发送数据,最后关闭连接,这是一次交互过程。

下图是客户端和服务端之间建立连接和连接断开的流程图:

以下是具体的代码实现:

server端

client端:

对应的测试结果如下:

客户端输入hello,服务端发送hi

由上图可以可以看出服务端收到hello,客户端收到hi,结果正确。

java客户端服务器聊天程序流程图_基于java的socket简单聊天编程相关推荐

  1. java制作局域网聊天器_基于Java的局域网聊天工具

    一 需求分析 掌握Java语言的程序设计方法,理论结合实际操作巩固我们所学的现有知识,使用图形用户界面和socket通信实现一个聊天程序,充分利用线程知识,实现用一个局域网聊天室,同时学会处理各种异常 ...

  2. java教务系统类设计_基于Java EE体系的高校教务管理系统的设计开发

    <基于Java EE体系的高校教务管理系统的设计开发>由会员分享,可在线阅读,更多相关<基于Java EE体系的高校教务管理系统的设计开发(3页珍藏版)>请在人人文库网上搜索. ...

  3. 基于Java的设计开题报告_基于Java的电子邮件的收发系统的设计与实现开题报告...

    基于Java的电子邮件的收发系统的设计与实现开题报告 (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 开题报告 基于 Java 的电子 ...

  4. java程序实现剪刀石头布功能_基于JAVA的剪刀石头布游戏设计——Java课程设计报告_...

    基于JAVA的剪刀石头布游戏设计 1剪刀石头布游戏设计思路阐述 在设计游戏时,我们要充分考虑到剪刀石头布游戏的特性,以及多种技术的实现: ⑴构造创建服务器端和客户端 ⑵创建输入输出流 ⑶编写服务器端处 ...

  5. java开发组态软件下载_基于JAVA的煤矿安全监控系统组态软件设计研究.pdf

    ·218· 工矿自动化 基于JAVA的煤矿安全监控系统组态软件设计 鲍毅华钢 (中国矿业大学信电学院 江苏徐州 221008) [摘要]本文通过对当前煤矿安全监控系统组态存在的问题和发展趋势的问题,提 ...

  6. java电信计费项目论文_基于JAVA开发的电信IP计费系统设计毕业论文

    基于JAVA开发的电信IP计费系统设计毕业论文 本科毕业设计(论文)基于 JAVA 开发的电信 IP 计费系统毕业设计(论文)任务书学院:信息科学与工程学院 系级教学单位:电子与通信工程学号学生姓名专 ...

  7. java怎么写桌面日历_基于java的桌面日历系统的设计与实现毕业设计论文最终版.doc...

    基于java的桌面日历系统的设计与实现毕业设计论文最终版 分类号_______________ 密级________________ UDC _______________ 学号_ ___ 毕业设计( ...

  8. Java制作报表系统流程_基于JAVA报表生成系统设计与实现.doc

    基于JAVA报表生成系统设计与实现 摘 要 现在是信息社会,各种信息都需要处理并直观展现,如股票,物价等信息都需要通过数据报表来展现.分析,因此高质量报表软件系统具有重要的实际意义. 本论文课题研究探 ...

  9. java velocity是什么意思_基于 Java 的模板引擎Velocity快速入门

    最近使用Velocity模板引擎,写一个maven项目Coding生成工具. 对基于Java的模板引擎Velocity的demo总结如下: Step1. 创建Maven项目,添加如下velocity的 ...

最新文章

  1. 干货|《深度学习入门之Pytorch》资料下载
  2. python学习记录(三)
  3. C#学习笔记(六):可空类型、匿名方法和迭代器
  4. 模拟后台数据,ajax请求,有什么方法可以模拟ajax请求?
  5. 使用Guava MapSplitters配置Hadoop
  6. 一个切图仔的 CSS 笔记
  7. sublime_text 3 注册序列号
  8. 基于Pytorch的NLP入门任务思想及代码实现:判断文本中是否出现指定字
  9. centos7下载安装mysql步骤_Linux-centos7安装mysql步骤
  10. Installation error code: -103签名不一致错误
  11. 4.4 一个完整的Google Maps应用
  12. Unity调用动态链接库dll和so
  13. 学习J2ME需要掌握的七种技术
  14. python提示line3_Python小技巧:Python3中利用tab键进行代码提示-阿里云开发者社区...
  15. 幸运抽奖系统带后台源码
  16. 计算机制图知识点,工程制图的基础知识
  17. 计算机类耗品有哪些,办公用品和办公耗材清单有哪些?
  18. UCF Local Programming Contest 2018题解
  19. 使用 matplotlib处理彩色图像
  20. linux禁止root用户su,Linux 禁止普通用户su到root

热门文章

  1. Django视图层:URL的反向解析(主路由include之namespace,子路由之name,模板标签{%url%},视图reverse()函数,反向解析示例,URL命名空间
  2. kubernetes安装部署(kubeadm方式亲测)
  3. VUE3(setup响应式函数系统API)
  4. mysql 字段 浮点_MySQL浮点数据字段不接受每个浮点数?如何解决这个问题?
  5. OpenShift 4 - Fedora CoreOS (1) - 最简安装
  6. 搭建GraalVM环境
  7. Elasticseach 从零开始学习记录(二) - Head插件
  8. MongoDB教程——第3天(性能——索引)
  9. (四)在真实数据上运行AI时尚分类
  10. 使用TensorFlow.js的AI聊天机器人三:改进了文本中的情感检测