在上一篇文章中,简单的介绍了java中入门级的socket编程,简单的实现了客户端像服务器端发送数据,服务器端将数据接收并显示在控制台,没有涉及多线程。上一篇文章的链接:Java中利用socket实现简单的服务端与客户端的通信(入门级)

这次,我们将上一节中的代码进行少许的更改,将服务器更改为多线程,使得服务器可以为多个客户端服务。

因为是服务器端实现的多线程,所以客户端的代码不用做任何更改,和上一篇中的一样。只需要对服务端的代码进行稍许更改即可。

在项目中新建一个类,这个类就是线程类,所以要继承自Thread类,该类的代码如下:

package server_1;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;public class MyThread extends Thread {//Socket socket=null;public MyThread(Socket socket) throws Exception{this.socket=socket;}public void run(){BufferedReader in = null;  try {in = new BufferedReader(new InputStreamReader(socket.getInputStream()));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} //启动缓冲区 //out = new PrintWriter(client.getOutputStream());  while (true) {  String msg=null;try {msg = in.readLine();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} // 将客户端发送来的信息存储在msg中 System.out.println(msg);  if (msg.equals("shutdown")) {  //客户端如果发送的是shutdown,就关闭客户端break;  }  }try {in.close();socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} //执行相应的关闭操作         }}

在上述代码中,MyThread的构造函数将socket传入类内部的socket中,同时,将通信的 主要任务都写在了这个线程类中。

以下是主类中的代码:

package server_1;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class server_1 {  public static void main(String[] args) throws Exception { //将异常全部抛出 ServerSocket server = new ServerSocket(10000);    //用serversocket来启动服务器,并指定端口号System.out.println("服务器启动。。。");int count=0;while(true){Socket socket = server.accept();  //获取客户端的socket信息MyThread mythread=new MyThread(socket);mythread.start();count++;System.out.println("客户端数量为:"+count);}//server.close();    //PrintWriter out = null;  //}      }
}

可以看到,此次在服务端加了一个没有退出条件的循环操作,循环中监听网络中的socket信息,当有客户端连接的时候,就讲这个socket传给一个线程去执行,同时显示出目前连接到服务端的客户端的数量。

测试时,先运行服务端,然后打开两次客户端,分别像服务端发送数据,可以看到服务端可以显示出连接的客户端的数量,并且可以正常的显示客户端发送过来的数据。

2015年11月19日   西安交通大学

Java中利用socket实现简单的服务端与客户端的通信(基础级)相关推荐

  1. Java中利用socket实现简单的服务端与客户端的通信(中级)——实现任意双向通信

    本文计划采用socket实现客户端和服务端的任意双向通信,即客户端可以随时给服务端发消息,服务端也可以随时给客户端发消息,最终结果就是一个类似与QQ的聊天软件的功能. 以下代码可以直接拷贝到Eclip ...

  2. Java中利用socket实现简单的服务端与客户端的通信(入门级)

    Java编程中,要想要使用网络通信,就离不开Socket编程,在此对socket进行简单的介绍.首先声明,这是一个入门级的介绍,仅仅简单的实现了客户端向服务端发送数据,服务端正常的接收数据,当接收到特 ...

  3. SpringBoot(23) 集成socket.io服务端和客户端实现通信

    一.前言 websocket和socket.io区别? websocket 一种让客户端和服务器之间能进行双向实时通信的技术 使用时,虽然主流浏览器都已经支持,但仍然可能有不兼容的情况 适合用于cli ...

  4. socket.io服务端是java_SpringBoot(23) 集成socket.io服务端和客户端实现通信

    @Slf4j @Service(value = "socketIOService") public class SocketIOServiceImpl implements ISo ...

  5. axis idea 设置apache_利用IDEA创建Web Service服务端和客户端的详细过程

    创建服务端 一.file–>new–>project 二.点击next后输入服务端名,点击finish,生成目录如下 三.在 HelloWorld.Java 文件中右击,选 WebServ ...

  6. Java实现服务端和客户端的通信(文件下载)

    网络编程 网络通信的介绍 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据 两台电脑连在一起就组成了一个计算机网络.我们通过光纤连接到电信的网关,中国电信通过海底光缆和美国电信网关连接,你 ...

  7. windows Socket编程之TCP服务端与客户端

    在前面的文章中有一篇讲到了命名管道通信,它是创建一根管道来进行进程之间或网络之间通信的.但是它有些缺陷,比如说效率较低等.而从这篇文章开始将介绍socket编程.socket是通过TCP,UDP,IP ...

  8. Winform中使用MQTTnet实现MQTT的服务端和客户端之间的通信以及将订阅的消息保存到文件

    场景 MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻 ...

  9. 简单的c++服务端与客户端的通信

    本篇博客是本人没有深入学习网络通信,对其浅浅的了解了一下,只知道怎么连接以及发送内容,若内容有什么错误的地方还麻烦各位大佬可以指出来大家一起讨论一下.   服务端代码如下: #include < ...

最新文章

  1. 具体解释可变參数列表
  2. iOS定义静态变量、静态常量、全局变量
  3. tomcat配置文件修改
  4. 某小公司项目环境部署演变之路
  5. Wilcox:子类化顶级窗口
  6. 即将到来的 Android N 将具备这些新特性
  7. Windows 查看程序占用的端口
  8. 三星Galaxy Note 20系列将首发Exynos 992:性能超骁龙865
  9. linux进程跑飞了,【Shell】Linux信号(二)
  10. Thread.Join 和 Task.Wait 方法
  11. VB2010(17)_消息对话框MessageBox
  12. SmartDrv的前世今生——PrimoCache_2.2.0汉化
  13. 【getchar】在C语言中getchar的使用方法和读取规则
  14. linux 模拟误码率,基于System View的比特误码率测试的仿真研究
  15. keyshot渲染玻璃打光_keyshot打光技巧,教你如何制作汽车自由式布光效果
  16. STM32绝对地址赋值
  17. 事情永远都没有想象中那么好
  18. 装了oracle 开机卡黑屏,开机黑屏进不了系统,手把手教你解决电脑开机黑屏进不了系统...
  19. 【微信小程序】微信小程序获取当日以后的时间日期天数、星期
  20. php获取当前URL地址

热门文章

  1. day17——其他内置函数
  2. lvs为何不能完全替代DNS轮询--转
  3. mysql 表设计时的update_time自动更新
  4. 【联邦学习】FATE 集群部署 step1
  5. 【模型开发】EDA探索性分析
  6. Keras中Callback函数的使用
  7. 线性判别分析(Linear Discriminant Analysis)(一)
  8. 白话Elasticsearch49-深入聚合数据分析之 Percentile Ranks Aggregation-percentiles rank以及网站访问时延SLA统计
  9. Elasticsearch-04 ES中的术语和基本用法
  10. Quartz-任务调度概述及Quartz(2.2.X)快速入门