普通Socket一般分为ServerSocket和Socket两大类。
ServerSocket用于服务端,其accept()方法可以用来监听请求,该方法方法在连接传入之前一直阻塞,也就是说服务端程序会停留在该方法调用处,直到有客户端请求连接进来。accept()方法会返回一个Socket对象。
Socket用来传输数据,JDK中描述为套接字,理解起来还是有点困难。 TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字(socket)。一般客户端使用Socket绑定服务端IP以及监听端口发起请求并传输数据。
用大白话说就是:ServerSocket是服务端用来检测客户端是否使用Socket发起请求了,如果有,拿到Socket,从其中拿到客户端的请求数据,再将响应数据写入Socket,这其中读取写入数据又设计IO流操作。客户端使用Socket对象发送请求数据到服务端,然后在从该socket中拿到服务端的响应数据。
代码实现如下(代码中注释写的很详细):
服务端模拟实现:
/*
模拟服务器端 - 普通 Socket 实现
*/
public class Server {
public static void main ( String [] args ) {
try {
// 创建一个 ServerSocket ,绑定监听端口为 8080
ServerSocket serverSocket = new ServerSocket( 8080 ) ;
// 调用 accept() 方法监听客户端请求,该方法是阻塞方法,程序会停留在这里直到有客户端请求服务端的 8080 接口
//Socket 用于通信中的数据传输
Socket socket = serverSocket.accept() ;
// 创建 BufferedReader 接收来自客户端的请求数据,源数据流对象来自客户端发起请求的 Socket
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(socket.getInputStream())) ;
String requestData = bufferedReader.readLine() ;
System . out .println( " 接收到客户端的请求数据: " + requestData) ;
// 创建 PrintWriter 发送服务端响应数据,接收数据流对象也来自 Socket
PrintWriter printWriter = new PrintWriter(socket.getOutputStream()) ;
// 写入响应数据
printWriter.println( " 服务端已接收到你的请求,响应数据为(服务端响应数据)! " ) ;
// 使用 flush() 方法强制发送数据而不是等到缓冲区满了后才发送
printWriter.flush() ;
// 关闭资源
printWriter.close() ;
bufferedReader.close() ;
socket.close() ;
serverSocket.close() ;
} catch ( IOException e ) {
e .printStackTrace() ;
}
}
}
客户端程序如下:
/*
模拟客户端 - 普通 Socket 实现
*/
public class Client {
public static void main ( String [] args ) {
try {
// 创建 Socket 用来发起请求,设置请求 IP 为本机,端口号为 8080
Socket socket = new Socket( "127.0.0.1" , 8080 ) ;
// 通过 Socket 的流对象创建 PrintWriter 用于发送请求数据,创建 BufferedReader 用于接收服务端响应数据
PrintWriter printWriter = new PrintWriter(socket.getOutputStream()) ;
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(socket.getInputStream())) ;
// 发送数据
String requestData = " 客户端请求数据 " ;
printWriter.println(requestData) ;
printWriter.flush() ;
// 接收服务端响应数据
String responseData = bufferedReader.readLine() ;
System . out .println( " 接收到服务端的响应数据为: " + responseData) ;
// 关闭资源
printWriter.close() ;
bufferedReader.close() ;
socket.close() ;
} catch ( IOException e ) {
e .printStackTrace() ;
}
}
}
先启动服务端程序,再启动客户端程序。输出如下:
服务端先启动后没有输出。
启动客户端后:
服务端输出:
客户端输出:
Socket的用法——普通Socket相关推荐
- C#中Socket通信用法实例详解
本文实例讲述了C#中Socket通信用法.分享给大家供大家参考.具体如下: 一.UDP方式: 服务器端代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 ...
- Java语言Socket接口用法详解
Socket接口用法详解 在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Serve ...
- java中socket类_Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的网络通信时通过Socket实现的,Socket分为Server ...
- socket android用法,Android NDK中socket的用法以及注意事项分析
与Java层中的套接字相比,本机层中的Socket可以选择更多的配置项,并获得关于当前拥塞状态的更准确的信息,那么 NDK中socket的用法以及注意事项分析,大家清楚吗?下文是爱站技术频道小编为大家 ...
- python中bind的用法_Python socket.bind方法代码示例
本文整理汇总了Python中socket.bind方法的典型用法代码示例.如果您正苦于以下问题:Python socket.bind方法的具体用法?Python socket.bind怎么用?Pyth ...
- php中socket的使用,php中socket的用法详解,phpsocket详解_PHP教程
php中socket的用法详解,phpsocket详解 本文实例详细讲述了php中socket的用法,分享给大家供大家参考.具体用法如下: 一.开启socket phpinfo();查看是否开启了so ...
- Java Socket笔记-利用tcp socket搭建CS模型
目录 基本概念 代码与实例 基本概念 这里采用的是TCP模型,只说明一点,在Java中有 import java.net.Socket; 这个包中TCP的用法个人觉得和QTcpSocket差不多(个人 ...
- php socket 教程,php实现socket的方法
本文主要和大家分享php实现socket的方法,主要以文字和代码的方式和大家分享,希望能帮助到大家. 一.Socket 简介 1.socket只不过是一个数据结构. 2.使用这个socket数据结构去 ...
- 计算机网络实验socket编程,计算机网络实验 socket编程
使用连接.终止连接的过程.在数据传输过程中,各数据分组不携带目的地址,而使用连接号(connect ID ).从本质上看,连接是一个管道,收发数据不但顺序一致,而且内容相同. Socket 编程中,双 ...
最新文章
- 全球农业资源利用与粮食安全研讨会 国际农民丰收节贸易会
- PHP聊天记录内啥,PHP的PSR系列轨范都有啥内容
- Ubuntu编写开机自启动脚本(转载)
- mac python运行按哪个键_#mac python如何使用教程#怎么在mac终端运行python程序
- linux 查看led设备,Linux下LedButton设备驱动——详细设计
- Facebook轮播连结广告可展示5个图像与连结
- python自动化办公能做什么-用Python自动办公,做职场高手(完结)
- 热烈庆祝排名进入5000
- 基于java的智能化停车系统ER图_智能化的停车场系统设计原则及解决方案
- 图片 title 和 alt区别:
- 云服务器如何链接本地打印机_如何在服务器上安装网络打印机
- MySQL中的自增主键用完了怎么办
- C语言数组 一维数组篇
- bad interpreter问题
- 方根法公式_方根的简易算法
- 基于Redis GEO(地理位置) 实现附近的人,商家等相关功能实现 使用SpringBoot Redis工具类
- c还是java(雨思版)
- Excel VBA合并不同工作簿所有工作表到一张工作表
- 计算机名人榜----- 阿兰·麦席森·图灵
- GeekPwn2019,看一群“少年极客”正“热血开斗”……
热门文章
- Nmap常用扫描命令
- gfp 通用成帧程序 帧结构 校验 crc 多项式 加扰
- FLStudio中文全套插件包FL水果20.8中文宿主软件插件
- JAVA8 lambda表达式 对List集合去重
- 高通平台开发系列讲解(AI篇)SNPE工作流程介绍
- 欧姆龙CK3M与松下A6伺服驱动配置——位置模式
- JavaWeb框架(一):Web入门,Http的请求和响应,https介绍,Web实战自定义服务器
- [问题]浏览器主页被劫持为2345
- 一文看懂计算机网络五层协议+各层网络协议大全
- bitset 用法 (转)