TCP流套接字编程

TCP流套接字与UDP数据报套接字对比

API介绍

TCP协议核心的特点是面向字节流,是通过读取数据(单位字节)来完成通信。

TCP套接字与UDP套接字不同的点在于TCP是通过建立连接,使用输入流和输出流的方式完成通信。

ServerSocket

是创建服务端Socket的API,专门用于服务端

构造方法

方法

注:有客户端连接后,会自动返回一个Socket服务端对象,并且基于Socket建立与客户端的连接,否则阻塞等待

Socket

是客户端的Socket 或服务端中在接收客户端连接请求后返回的服务端Socket

不论是客户端或者服务端的Socket,都是在双方建立连接后保存对端信息,用来接收和发送数据的。

构造方法

方法

接下来我们实现一个回显服务器,来实现TCP协议下的连接方式

一些方法的介绍

Scanner:

可以看到,Scanner的构造方法中参数对象是可以为InputStream输入流对象的,因此使用Scanner方法可以直接写入到输入流对象中。

Scanner.hasnext():

通俗来讲,只有当客户端关闭时,返回false

PrintWriter:

对于PrintWriter来说,构造方法的参数对象也可以为OutputStream输出流对象。

服务端的实现

客户端的实现

回显服务器演示:

引入多线程实现一个服务器服务多个客户端场景

目前的代码只适用于一个服务器服务一个客户端的场景,:

如图,对于服务端而言,只限于监听一个客户端后执行processConnection方法为这个客户端服务,只有这个客户端停止运行才会连接下一个服务端。

我们要想实现多个客户端与服务器进行通信,需要引入多线程

首先我们需要打开编辑运行/调配设置的运行框,执行如下步骤,点击允许多个实例:

服务器使用多线程(线程池的方式)

修改一下服务器的start方法

显示:

相关推荐
九英里路1 小时前
protobuf快速上手
网络·c++·中间件·json·谷歌·序列化·protobuf
女神下凡7 小时前
芯参谋(107):杰理AC_中科蓝讯_开发指南
linux·服务器·网络·单片机·嵌入式硬件
爱和冰阔落12 小时前
【Linux网络】TCP 半包粘包怎么解决?从长度报头、JSON 拆包到网络计算器完整实战
linux·运维·网络·tcp/ip
say_fall14 小时前
【Linux网络编程】UDP套接字编程:系统编程组件、基础回显服务、InetAddr与地址转换、翻译服务与线程池聊天室
linux·服务器·网络·udp·vr
我不会插花弄玉1 天前
6.传输层协议UDP【由浅入深-网络】
网络·网络协议·udp
火云代理1 天前
更换网络后为什么会退出登录?分清 IP、Cookie 与会话的关系
服务器·网络·网络协议·tcp/ip·php·ip
xbzb1 天前
容器 IP 每次重建都变?docker network 五种模式与自定义网桥固定地址
网络·docker·容器·ip·network·固定
火云代理1 天前
同一个网站,有的网络能打开、有的打不开?认识 IPv4 与 IPv6 的访问差异
服务器·网络·网络协议·tcp/ip·测试工具·php·状态模式
坤坤子吖1 天前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习
火云代理1 天前
Python 使用代理 IP 前,先弄清 Requests 的配置来源与验证方法
网络·python·网络协议·tcp/ip·ip