原文链接 作者:Jakob Jenkov 译者:homesick

用java.net.ServerSocket实现java服务通过TCP/IP监听客户端连接,你也可以用Java NIO 来代替java网络标准API,这时候需要用到 ServerSocketChannel。

创建一个 ServerSocket连接

以下是一个创建ServerSocket类来监听9000端口的一个简单的代码

ServerSocket serverSocket = new ServerSocket(9000);

监听请求的连接

要获取请求的连接需要用ServerSocket.accept()方法。该方法返回一个Socket类,该类具有普通java Socket类的所有特性。代码如下:

ServerSocket serverSocket = new ServerSocket(9000); boolean isStopped = false;while(!isStopped){   Socket clientSocket = serverSocket.accept();    //do something with clientSocket}

对每个调用了accept()方法的类都只获得一个请求的连接。

另外,请求的连接也只能在线程运行的server中调用了accept()方法之后才能够接受请求。线程运行在server中其它所有的方法上的时候都不能接受客户端的连接请求。所以”接受”请求的线程通常都会把Socket的请求连接放入一个工作线程池中,然后再和客户端连接。更多关于多线程服务端设计的文档请参考 java多线程服务

关闭客户端Socket

客户端请求执行完毕,并且不会再有该客户端的其它请求发送过来的时候,就需要关闭Socket连接,这和关闭一个普通的客户端Socket连接一样。如下代码来执行关闭:

socket.close();

关闭服务端Sockets

要关闭服务的时候需要关掉 ServerSocket连接。通过执行如下代码:

serverSocket.close();

Java 网络教程: ServerSocket相关推荐

  1. Java网络编程和NIO详解开篇:Java网络编程基础

    老曹眼中的网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为我们拥有网络.网络是一个神奇的东西,它改变了你和我的 ...

  2. Java实例教程(上)

    第一个Java程序 Java 枚举 Java注释 Java创建对象 Java访问实例变量和方法 Java局部变量实例 Java编译错误 Java 实例变量示例 Java类变量 静态变量示例 Java静 ...

  3. Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例

    Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...

  4. Java网络编程(四)—— ServerSocket(一)

    Java网络编程(四)-- ServerSocket(一) Java网络编程(四)-- ServerSocket(一) 总述 创建ServerSocket 绑定端口 使用ServerSocket 总述 ...

  5. JAVA网络编程之Socket

    Socket网络编成是一种较为底层的网络数据传输,很多语言都支持. 本例是根据菜鸟教程中的Java网络编程而写. 详细内容参考请参考:http://www.runoob.com/java/java-n ...

  6. 有什么好的Java自学教程视频,适合初学者

    动力节点Java培训最新上线Java实验班,等你来测试自己适不适合学习Java编程哦! 随着互联网的发展,视频教程充斥着网络,很多人为了能够在视频教程中捞取一桶金,纷纷投入视频售卖的大军之中,其中不乏 ...

  7. Java菜鸟教程笔记

    参考:http://www.runoob.com/java/java-tutorial.html Java 基本数据类型 内置数据类型 引用类型 Java 变量类型 Java 局部变量 实例变量 类变 ...

  8. Java 网络编程API以及实例

    Java 网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net包中J2SE的API包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和接 ...

  9. java 密钥工厂 desede_20145212 实验五《Java网络编程》

    20145212 实验五<Java网络编程> 一.实验内容1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代 ...

最新文章

  1. 停课不停学 阿里云天池免费开放AI实训平台
  2. Android 使用OpenCV的三种方式(Android Studio)
  3. linux ls什么意思,linux – 你如何确定bash ls的颜色是什么意思?
  4. 【软件测试】结构化分支和循环语句的白盒测试
  5. 29 WM配置-策略-出库策略2-定义“紧急FIFO”策略(Stringent FIFO)
  6. 建立p2p互相连接的社区集群机器人设计(一)
  7. 【ActiveReports 大数据分析报告】用数据分析的手段告诉你,复联4有多火爆?
  8. 派尼数据库连接池配置
  9. php里无法找到该网页,thinkphp搭建网站后端,入口文件找不到(无法加载)
  10. word页眉页脚,奇偶不同
  11. 第N次重装系统之win10注册表
  12. Linux Ubuntu 鼠标变为十字架锁死解决办法
  13. ccf 考试时间_梳理丨2020年五大学科竞赛考试时间安排出炉!
  14. JAVA SE 005——类型转换
  15. SQL 发送Email
  16. vue项目接入腾讯im
  17. 中国石油大学北京计算机专业保研,2020年中国石油大学(北京)保研率是多少...
  18. 12306排队是什么意思_12306订单请求排队中是什么意思 要等多久
  19. toad mysql导入excel_toad导入表数据库
  20. CVE-2020-14644 weblogic iiop反序列化漏洞分析

热门文章

  1. c#执行插入sql 时,报错:异常信息:超时时间已到。在操作完成之前超时时间已过或服务器未响应
  2. c++/ boost 库常见错误及解决方法总结
  3. pache tomcat慢速HTTP拒绝服务攻击安全问题解决办法
  4. VMware Horizon Client剪贴板异常问题解决
  5. 解决8080端口被占用问题
  6. thinkphp5(tp5)中success跳转页面和弹窗问题解决
  7. Python:检查‘Dictionary‘是否为空似乎不起作用
  8. 高度等于动态宽度(CSS流体布局)
  9. 使用Android开发工具23版更新Eclipse
  10. Java的“ for each”循环如何工作?