服务器线程类

package com.susu;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;public class ServerThread implements Runnable{private Socket socket=null;public ServerThread(Socket socket){this.socket=socket;}@Overridepublic void run() {// TODO Auto-generated method stubInputStream is=null;InputStreamReader isr=null;BufferedReader br=null;try {//输入流is=socket.getInputStream();isr=new InputStreamReader(is);br=new BufferedReader(isr);String info=null;while((info=br.readLine())!=null){System.out.println("我是服务端,客户端说:"+info);}//关闭输入流socket.shutdownInput();//输出流OutputStream os=socket.getOutputStream();PrintWriter pw=new PrintWriter(os);pw.write("欢迎你!!");pw.flush();//关闭输出流socket.shutdownOutput();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}  finally{//关闭资源try {if(br!=null)br.close();if(isr!=null)isr.close();if(is!=null)is.close();if(socket!=null)socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

服务端

package com.susu;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class Server {/*** 服务端*/public static void main(String[] args) {// TODO Auto-generated method stubtry {ServerSocket ss = new ServerSocket(2000);System.out.println("***服务器即将启动,等待客户端连接***");Socket socket = null;int count = 0;// 循环监听客户端的连接while (true) {socket = ss.accept();// 创建线程实例ServerThread serverThread = new ServerThread(socket);Thread thread = new Thread(serverThread);// 开启线程thread.start();System.out.println("客户端IP地址:"+ socket.getInetAddress().getHostAddress());System.out.println("已连接的客户端数:" + (++count));}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

客户端:

package com.susu;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;public class Client {public static void main(String[] args) {try {Socket socket=new Socket("127.0.0.1", 2000);//输出流OutputStream os=socket.getOutputStream();PrintWriter pw=new PrintWriter(os);pw.write("今天天气很好~");pw.flush();//关闭输出流socket.shutdownOutput();//输入流InputStream is=socket.getInputStream();InputStreamReader isr=new InputStreamReader(is);BufferedReader br=new BufferedReader(isr);String info=null;while((info=br.readLine())!=null){System.out.println("我是客户端,服务器说:"+info);}//关闭资源pw.close();os.close();socket.close();} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

运行结果:

由于是客户端和服务端都是本机,IP地址一直不会变~~这样监听的也是连接数,不是客户端的个数。

如果要优化 可以通过IP地址来计算客户端的个数~~

使用多线程实现多客户端的连接(通过Socket实现TCP编程)相关推荐

  1. Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤...

    TCP和UDP是两个传输层协议,广泛应用于网络中不同主机之间传输数据.对任何程序员来说,熟悉TCP和UDP的工作方式都是至关重要的.这就是为什么TCP和UDP是一个流行的Java编程面试问题. Jav ...

  2. Java的Socket通信----通过 Socket 实现 TCP 编程之多线程demo(2)

    JAVA Socket简介 所谓socket 通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答 ...

  3. 易语言tcp多线程服务端客户端_太详细了,TCP协议面试灵魂10问,建议收藏!

    推荐阅读: 阿里P9架构师120分钟带你掌握线程池,不在为线程而烦恼​www.bilibili.com 不懂算法怎么去字节等大厂面试?左程云大神联合马士兵大佬120分钟带你掌握算法底层​www.bil ...

  4. 基于Java的Socket实现TCP连接

    资源下载地址:https://download.csdn.net/download/sheziqiong/86159198 资源下载地址:https://download.csdn.net/downl ...

  5. C语言网络编程:TCP实现多线程实现多客户端

    TCP通信的编程模型如下: TCP通信是必须要有一个服务器,通过accept函数与客户端socket进行三次握手连接创建的通信描述符与客户端进行数据传输. 此时可以将accept函数的连接设置为多线程 ...

  6. Java多线程实现多客户端的通信

    title: Java多线程实现多客户端的通信 date: 2019-05-05 12:50:00 Java多线程实现多客户端的通信 昨天学了Java中网络支持Socket应用,写了一个基于TCP通信 ...

  7. java实现tcp服务器(单线程、多线程)、客户端

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java实现tcp服务器(单线程.多线程).客户端. 服务器端接收客户申请,响应时间戳和用户源字符串. 客户端使用控制台作为输入输出流 tcp服务 ...

  8. 【Java——网络编程基础之客户端服务器连接】

    网络编程 1.1软件结构 1.2 网络通信协议 1.3 协议分类 1.4网络编程三要素 协议 IP地址 端口号 TCP通信程序 2.1 概述 2.2 Socket类 构造方法 成员方法 2.3 Ser ...

  9. CentOS7.4下 VNC Server的搭建和客户端的连接配置

    CentOS7.4下 VNC Server的搭建和客户端的连接配置 服务器版本:CentOS Linux release 7.4.1708 (Core) yum方式安装VNC server yum i ...

最新文章

  1. 看到这儿,你就不会再轻易相信自己的眼睛
  2. UIActivityIndicatorView
  3. jdk和tomcat配置
  4. 126篇殿堂级深度学习论文分类整理 从入门到应用(下)
  5. 信息系统服务器备机,医院信息系统业务连续性讨论:双机热备、RAC还是x86一体机?...
  6. jQuery 源码解析笔记(一)
  7. Kafka 副本leader选举
  8. 拓端tecdat|R语言使用Profviz进行Metropolis-in-Gibbs抽样和运行时间分析
  9. clover写入efi_黑苹果安装核心文件-四叶草引导Clover EFI 配置文件结构讲解
  10. MP4Box常用命令
  11. 高性能内存分配器 jemalloc 基本原理
  12. dnf新起号怎么才不出人脸_教你如何快速养成一个新号 新角色速成教学
  13. C# 添加Excel水印
  14. vue.js ElementUI /java 笔记
  15. html引入png不显示透明北京,完美解决透明png图片及透明png背景,兼容所有浏览器...
  16. DLP和3LCD投影仪技术有什么区别?怎么选看这里!
  17. 软件测试周刊(第30期):专注 力量 敏捷 协作
  18. 2017年总结--心情篇
  19. 深度搜索(DFS),一种用于遍历和搜索的算法
  20. 新人如何利用今日头条自媒体平台赚钱?月收入轻松过万

热门文章

  1. k8s部署nginx
  2. 证件照人像与背景分离(Pythoncv)
  3. 查看Oracle数据库资源状况
  4. MOOC慕课进入课程后无法刷新出视频、作业等界面
  5. 你这么努力,为何还如此焦虑?
  6. 一、FreeRTOS简介
  7. 操作系统——可变分区空闲空间管理
  8. 守护进程——解放本地PC
  9. PHP学习-数据类型
  10. bootstrap--表格(table的各种样式)