使用多线程实现多客户端的连接(通过Socket实现TCP编程)
服务器线程类
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编程)相关推荐
- Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤...
TCP和UDP是两个传输层协议,广泛应用于网络中不同主机之间传输数据.对任何程序员来说,熟悉TCP和UDP的工作方式都是至关重要的.这就是为什么TCP和UDP是一个流行的Java编程面试问题. Jav ...
- Java的Socket通信----通过 Socket 实现 TCP 编程之多线程demo(2)
JAVA Socket简介 所谓socket 通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答 ...
- 易语言tcp多线程服务端客户端_太详细了,TCP协议面试灵魂10问,建议收藏!
推荐阅读: 阿里P9架构师120分钟带你掌握线程池,不在为线程而烦恼www.bilibili.com 不懂算法怎么去字节等大厂面试?左程云大神联合马士兵大佬120分钟带你掌握算法底层www.bil ...
- 基于Java的Socket实现TCP连接
资源下载地址:https://download.csdn.net/download/sheziqiong/86159198 资源下载地址:https://download.csdn.net/downl ...
- C语言网络编程:TCP实现多线程实现多客户端
TCP通信的编程模型如下: TCP通信是必须要有一个服务器,通过accept函数与客户端socket进行三次握手连接创建的通信描述符与客户端进行数据传输. 此时可以将accept函数的连接设置为多线程 ...
- Java多线程实现多客户端的通信
title: Java多线程实现多客户端的通信 date: 2019-05-05 12:50:00 Java多线程实现多客户端的通信 昨天学了Java中网络支持Socket应用,写了一个基于TCP通信 ...
- java实现tcp服务器(单线程、多线程)、客户端
全栈工程师开发手册 (作者:栾鹏) java教程全解 java实现tcp服务器(单线程.多线程).客户端. 服务器端接收客户申请,响应时间戳和用户源字符串. 客户端使用控制台作为输入输出流 tcp服务 ...
- 【Java——网络编程基础之客户端服务器连接】
网络编程 1.1软件结构 1.2 网络通信协议 1.3 协议分类 1.4网络编程三要素 协议 IP地址 端口号 TCP通信程序 2.1 概述 2.2 Socket类 构造方法 成员方法 2.3 Ser ...
- CentOS7.4下 VNC Server的搭建和客户端的连接配置
CentOS7.4下 VNC Server的搭建和客户端的连接配置 服务器版本:CentOS Linux release 7.4.1708 (Core) yum方式安装VNC server yum i ...
最新文章
- 看到这儿,你就不会再轻易相信自己的眼睛
- UIActivityIndicatorView
- jdk和tomcat配置
- 126篇殿堂级深度学习论文分类整理 从入门到应用(下)
- 信息系统服务器备机,医院信息系统业务连续性讨论:双机热备、RAC还是x86一体机?...
- jQuery 源码解析笔记(一)
- Kafka 副本leader选举
- 拓端tecdat|R语言使用Profviz进行Metropolis-in-Gibbs抽样和运行时间分析
- clover写入efi_黑苹果安装核心文件-四叶草引导Clover EFI 配置文件结构讲解
- MP4Box常用命令
- 高性能内存分配器 jemalloc 基本原理
- dnf新起号怎么才不出人脸_教你如何快速养成一个新号 新角色速成教学
- C# 添加Excel水印
- vue.js ElementUI /java 笔记
- html引入png不显示透明北京,完美解决透明png图片及透明png背景,兼容所有浏览器...
- DLP和3LCD投影仪技术有什么区别?怎么选看这里!
- 软件测试周刊(第30期):专注 力量 敏捷 协作
- 2017年总结--心情篇
- 深度搜索(DFS),一种用于遍历和搜索的算法
- 新人如何利用今日头条自媒体平台赚钱?月收入轻松过万