普通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相关推荐

  1. C#中Socket通信用法实例详解

    本文实例讲述了C#中Socket通信用法.分享给大家供大家参考.具体如下: 一.UDP方式: 服务器端代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 ...

  2. Java语言Socket接口用法详解

    Socket接口用法详解   在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Serve ...

  3. java中socket类_Java中的Socket的用法

    Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的网络通信时通过Socket实现的,Socket分为Server ...

  4. socket android用法,Android NDK中socket的用法以及注意事项分析

    与Java层中的套接字相比,本机层中的Socket可以选择更多的配置项,并获得关于当前拥塞状态的更准确的信息,那么 NDK中socket的用法以及注意事项分析,大家清楚吗?下文是爱站技术频道小编为大家 ...

  5. python中bind的用法_Python socket.bind方法代码示例

    本文整理汇总了Python中socket.bind方法的典型用法代码示例.如果您正苦于以下问题:Python socket.bind方法的具体用法?Python socket.bind怎么用?Pyth ...

  6. php中socket的使用,php中socket的用法详解,phpsocket详解_PHP教程

    php中socket的用法详解,phpsocket详解 本文实例详细讲述了php中socket的用法,分享给大家供大家参考.具体用法如下: 一.开启socket phpinfo();查看是否开启了so ...

  7. Java Socket笔记-利用tcp socket搭建CS模型

    目录 基本概念 代码与实例 基本概念 这里采用的是TCP模型,只说明一点,在Java中有 import java.net.Socket; 这个包中TCP的用法个人觉得和QTcpSocket差不多(个人 ...

  8. php socket 教程,php实现socket的方法

    本文主要和大家分享php实现socket的方法,主要以文字和代码的方式和大家分享,希望能帮助到大家. 一.Socket 简介 1.socket只不过是一个数据结构. 2.使用这个socket数据结构去 ...

  9. 计算机网络实验socket编程,计算机网络实验 socket编程

    使用连接.终止连接的过程.在数据传输过程中,各数据分组不携带目的地址,而使用连接号(connect ID ).从本质上看,连接是一个管道,收发数据不但顺序一致,而且内容相同. Socket 编程中,双 ...

最新文章

  1. 全球农业资源利用与粮食安全研讨会 国际农民丰收节贸易会
  2. PHP聊天记录内啥,PHP的PSR系列轨范都有啥内容
  3. Ubuntu编写开机自启动脚本(转载)
  4. mac python运行按哪个键_#mac python如何使用教程#怎么在mac终端运行python程序
  5. linux 查看led设备,Linux下LedButton设备驱动——详细设计
  6. Facebook轮播连结广告可展示5个图像与连结
  7. python自动化办公能做什么-用Python自动办公,做职场高手(完结)
  8. 热烈庆祝排名进入5000
  9. 基于java的智能化停车系统ER图_智能化的停车场系统设计原则及解决方案
  10. 图片 title 和 alt区别:
  11. 云服务器如何链接本地打印机_如何在服务器上安装网络打印机
  12. MySQL中的自增主键用完了怎么办
  13. C语言数组 一维数组篇
  14. bad interpreter问题
  15. 方根法公式_方根的简易算法
  16. 基于Redis GEO(地理位置) 实现附近的人,商家等相关功能实现 使用SpringBoot Redis工具类
  17. c还是java(雨思版)
  18. Excel VBA合并不同工作簿所有工作表到一张工作表
  19. 计算机名人榜----- 阿兰·麦席森·图灵
  20. GeekPwn2019,看一群“少年极客”正“热血开斗”……

热门文章

  1. Nmap常用扫描命令
  2. gfp 通用成帧程序 帧结构 校验 crc 多项式 加扰
  3. FLStudio中文全套插件包FL水果20.8中文宿主软件插件
  4. JAVA8 lambda表达式 对List集合去重
  5. 高通平台开发系列讲解(AI篇)SNPE工作流程介绍
  6. 欧姆龙CK3M与松下A6伺服驱动配置——位置模式
  7. JavaWeb框架(一):Web入门,Http的请求和响应,https介绍,Web实战自定义服务器
  8. [问题]浏览器主页被劫持为2345
  9. 一文看懂计算机网络五层协议+各层网络协议大全
  10. bitset 用法 (转)