什么是SOCKET通信,看完马上明白
一、Socket概述
Socket,即套接字。就是两台主机之间逻辑连接的端点。(通俗来说:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket)。
TCP/IP协议是传输层协议,主要解决数据如何在网络中传输。
HTTP是应用层协议,主要解决如何包装数据。
Socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议、本地主机的IP地址、本地进程的协议端口、远程主机的IP地址、远程进程的协议端口。
二、Socket整体流程
Socket编程主要涉及到客户端和服务端两个方面,首先是在服务器端创建一个服务器套接字
(ServerSocket),并把它附加到一个端口上,服务器从这个端口监听连接。端口号的范围是0到
65536,但是0到1024是为特权服务保留的端口号,可以选择任意一个当前没有被其他进程使用的端口。
客户端(Socket)请求与服务器进行连接的时候,根据服务器的域名或者IP地址,加上端口号,打开一个套接字(也就是连接一个服务端)。当服务器接受连接后,服务器和客户端之间的通信就像输入输出流一样进行操作。
三、Socket原理图
四、Socket编程示例
1.服务端:
public class ServerDemo {public static void main(String[] args) throws Exception {//1.创建一个线程池,如果有客户端连接就创建一个线程, 与之通信ExecutorService executorService = Executors.newCachedThreadPool();//2.创建 ServerSocket 对象ServerSocket serverSocket = new ServerSocket(9999);System.out.println("服务器已启动");while (true) {//3.监听客户端Socket socket = serverSocket.accept();System.out.println("有客户端连接");//4.开启新的线程处理executorService.execute(new Runnable() {@Overridepublic void run() {handle(socket);}});}}public static void handle(Socket socket) {try {System.out.println("线程ID:" + Thread.currentThread().getId()+ " 线程名称:" + Thread.currentThread().getName());//从连接中取出输入流来接收消息InputStream is = socket.getInputStream();byte[] b = new byte[1024];int read = is.read(b);System.out.println("客户端:" + new String(b, 0, read));//连接中取出输出流并回话OutputStream os = socket.getOutputStream();os.write("没钱".getBytes());} catch (Exception e) {e.printStackTrace();} finally {try {//关闭连接socket.close();} catch (IOException e) {e.printStackTrace();}}}
}
2.客户端:
public class ClientDemo {public static void main(String[] args) throws Exception {while (true) {//1.创建 Socket 对象Socket s = new Socket("127.0.0.1", 9999);//2.从连接中取出输出流并发消息OutputStream os = s.getOutputStream();System.out.println("请输入:");Scanner sc = new Scanner(System.in);String msg = sc.nextLine();os.write(msg.getBytes());//3.从连接中取出输入流并接收回话InputStream is = s.getInputStream();byte[] b = new byte[1024];int read = is.read(b);System.out.println("老板说:" + new String(b, 0, read).trim());//4.关闭s.close();}}
}
什么是SOCKET通信,看完马上明白相关推荐
- 苹果微信王者荣耀哪个服务器人多,王者荣耀:QQ区和微信区哪个玩家多?看完会明白...
原标题:王者荣耀:QQ区和微信区哪个玩家多?看完会明白 导读:王者荣耀:QQ区和微信区哪个玩家多?看完会明白 文|刺激小宇哥 阅读到这篇文章的各位趣友大家好!游戏无时无刻的丰富着我们的生活,也成为了我 ...
- 不愿意和别人打交道_不想麻烦别人,也不希望别人麻烦我,是什么心理?看完就明白...
阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到文章了.每天都有分享,完全是免费订阅,请放心关注. 注:本文转载自网络,侵删 ...
- 医院计算机管理在品管圈中的应用,品管圈在医院管理中怎么用?看完就明白了...
原标题:品管圈在医院管理中怎么用?看完就明白了 品管圈(Quality Circle,QCC),又称"质量小组",是一种企业对基层员工的自主管理.全员品管及持续改善最佳的管理活动, ...
- android重置系统,安卓手机越用越卡,恢复出厂设置真有用?别瞎搞,看完就明白了!...
安卓手机越用越卡,恢复出厂设置真有用?别瞎搞,看完就明白了! 现在手机的价格逐渐的开始上升,一部好一点的手机价格还是比较贵的,所以很多人想要节省更多的换机支出,都会想要购买到一款可以使用的比较久的手机 ...
- android8卡顿,看完就明白为什么安卓手机卡顿,这个技巧教你解决卡顿
原标题:看完就明白为什么安卓手机卡顿,这个技巧教你解决卡顿 Android由源代码开放,所以安卓手机拥有更多的黑科技功能.很多安卓用户觉得手机卡顿,其实是没有好好利用这些神奇功能.下面笔者就为大家介绍 ...
- 联通鸿蒙卡怎么样,联通腾讯大王卡对比百度大神卡:到底选谁看完就明白了
联通腾讯大王卡对比百度大神卡:到底选谁看完就明白了最近几个月内,运营商三巨头之一的联通突然宣布与互联网三巨头(百度.阿里.腾讯)合作,推出适用不同消费群体的定制型号卡产品,令人惊喜的是在套餐资费优惠力 ...
- 一次调频二次调频matlab仿真,一次调频二次调频的原理及作用,看完终于明白了!...
原标题:一次调频二次调频的原理及作用,看完终于明白了! 关注 在电网并列运行的机组当外界负荷变化引起电网频率改变时,网内各运行机组的调节系统将根据各自的静态特性改变机组的功率,以适应外界负荷变化的需要 ...
- android 中旋转往下抛动画,《全民解答》第26集:超级详细逆旋转发球教学 几点核心的关键点 看完马上开窍!...
原标题:<全民解答>第26集:超级详细逆旋转发球教学 几点核心的关键点 看完马上开窍! 简介 观众朋友们大家好,欢迎收看全民解答,今天我们来讲一下逆旋转发球,那么逆旋转可以说是在现在专业比 ...
- 1n4007二极管的参数,看完就明白了
1N4007是一种硅材料整流二极管,把方向交替变化的交流电换成单一方向的脉冲直流电,广泛应用于各种交流变直流的整流电路中.直插二极管1N4007,低频整流二极管,正向平均电流1A,耐压1000V,封装 ...
最新文章
- CodeGen API分析
- AttributeError: ‘NoneType‘ object has no attribute ‘group‘
- 公有云和私有云,哪种是大势所趋?
- (转)SplitContainer 控件(Windows 窗体)
- 【转】 android之如何在两个activity之间传递handler_利用broadcast广播机制
- [HDU3037]Saving Beans,插板法+lucas定理
- 开发效率不高?强烈推荐这十款精选IDEA插件
- 前端试题-CSS试题(1)
- Java + selenium 元素定位(3)之By TagName
- linux:如何修改用户的密码
- 51单片机lcd1602显示(模块)
- 飞思卡尔单片机DZ60---时钟初始化
- IntelliJ IDEA 2018.2 x64激活
- 51信用卡的面试问题
- python告诉你迪丽热巴 vs 杨幂 vs 林志玲谁最美
- CultureInfo中重要的InvariantCulture
- 最新抖音快手随机看小姐姐网站源码修复
- Spring - BeanFactoryPostProcessor 扩展接口
- Quorum Raft
- [下载演讲稿]数字藏品与元宇宙存储—数字新世界的“土壤”