java多线程实现多客户端socket通信
一、服务端
- package com.czhappy.hello.socket;
- import java.io.IOException;
- import java.net.InetAddress;
- import java.net.ServerSocket;
- import java.net.Socket;
- public class Server {
- public static void main(String[] args) {
- //创建ServerSocket示例,指定端口,侦听
- try {
- ServerSocket serverSocket = new ServerSocket(8888);
- System.out.println("服务即将启动,等待客户端连接");
- //记录客户端的数量
- int count = 0;
- Socket socket = null;
- while(true){
- //开始监听,等待客户端的连接
- socket = serverSocket.accept();
- ServerThread serverThread = new ServerThread(socket);
serverThread.setPriority(4);//设置线程的优先级,范围是:[1,10],默认为5- serverThread.start();
- count++;
- System.out.println("客户端的数量="+count);
- InetAddress address = socket.getInetAddress();
- System.out.println("当前客户端的IP地址为:"+address.getHostAddress());
- }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- package com.czhappy.hello.socket;
- 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.io.UnsupportedEncodingException;
- import java.net.Socket;
- /**
- * 服务器线程处理类
- * @author Administrator
- *
- */
- public class ServerThread extends Thread{
- Socket socket = null;
- public ServerThread(Socket socket){
- this.socket = socket;
- }
- public void run() {
- InputStream is = null;
- InputStreamReader isr = null;
- BufferedReader br = null;
- OutputStream os = null;
- PrintWriter pw = null;
- try {
- //获取字节输入流
- is = socket.getInputStream();
- //将字节输入流转化为字符输入流
- isr = new InputStreamReader(is, "utf-8");
- //为字符输入流添加缓冲
- br = new BufferedReader(isr);
- String data = br.readLine();
- while(data!=null){
- System.out.println("我是服务器,客户端说:"+data);
- data = br.readLine();
- }
- //关闭输入流
- socket.shutdownInput();
- //获取输出流,响应客户端请求
- os = socket.getOutputStream();
- pw = new PrintWriter(os);
- pw.write("欢迎您!");
- pw.flush();
- } catch (UnsupportedEncodingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- try {
- if(pw!=null){
- pw.close();
- }
- if(os!=null){
- os.close();
- }
- if(br!=null){
- br.close();
- }
- if(isr!=null){
- isr.close();
- }
- if(is!=null){
- is.close();
- }
- if(socket!=null){
- socket.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
二、客户端
- package com.czhappy.hello.socket;
- 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 socket = new Socket("192.168.0.45", 8888);
- //获取输出流,向服务器发送消息
- OutputStream os = socket.getOutputStream();//字节输出流
- PrintWriter pw = new PrintWriter(os);//将输出流包装成打印流
- pw.write("用户名:admin;密码:123");
- pw.flush();
- socket.shutdownOutput();//关闭输出流
- //获取输入流,读取服务器端响应信息
- InputStream is = socket.getInputStream();
- BufferedReader br = new BufferedReader(new InputStreamReader(is));
- String data = br.readLine();
- while(data!=null){
- System.out.println("我是客户端,服务器说:"+data);
- data = br.readLine();
- }
- br.close();
- is.close();
- pw.close();
- os.close();
- socket.close();
- } catch (UnknownHostException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
三、测试结果
需要先启动服务端,再启动客户端
服务端运行结果:
客户端运行结果:
java多线程实现多客户端socket通信的更多相关文章
- Java与C之间的socket通信
最近正在开发一个基于指纹的音乐检索应用,算法部分已经完成,所以尝试做一个Android App.Android与服务器通信通常采用HTTP通信方式和Socket通信方式.由于对web服务器编程了解较少 ...
- Java多线程-同步:synchronized 和线程通信:生产者消费者模式
大家伙周末愉快,小乐又来给大家献上技术大餐.上次是说到了Java多线程的创建和状态|乐字节,接下来,我们再来接着说Java多线程-同步:synchronized 和线程通信:生产者消费者模式. 一.同 ...
- java多线程实现TCP网络Socket编程(C/S通信)
目录 开篇必知必会 一.多线程技术 二.实现多线程接收 1.单线程版本 2.多线程版本 三.多线程与进程的关系 四.客户端界面完整代码 五.多线程通信对比 最后 开篇必知必会 在前一篇<Java ...
- Java多线程中的wait/notify通信模式
前言 最近在看一些JUC下的源码,更加意识到想要学好Java多线程,基础是关键,比如想要学好ReentranLock源码,就得掌握好AQS源码,而AQS源码中又有很多Java多线程经典的一些应用:再比 ...
- Java多线程中线程间的通信
一.使用while方式来实现线程之间的通信 package com.ietree.multithread.sync; import java.util.ArrayList; import java.u ...
- Java多线程编程-线程之间的通信
转载自:这里 学习了基础的线程知识 看到了 线程之间的通信 线程之间有哪些通信方式呢? 1.同步 这里讲的同步是指多个线程通过synchronized关键字这种方式来实现线程间的通信. public ...
- java 多线程使用方法及Socket的使用
public class newThread implements Runnable{ public void run(){ dosome(); } public void dosome(){ Sys ...
- java 多线程 synchronized与lock的通信机制等问题,结合相应实例说明
1. 利用多线程实现如下需求: 写两个线程,一个线程打印1~52,另一个线程打印A~Z,打印顺序是12A34B...5152Z: 2. 使用synchronized 实现 public class T ...
- java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()(多线程编程之二)
本篇我们将讨论以下知识点: 1.线程同步问题的产生 什么是线程同步问题,我们先来看一段卖票系统的代码,然后再分析这个问题: package com.zejian.test; /** * @author ...
随机推荐
- c语言冒泡排序算法
案例一: #include <stdio.h> int main(void){ int a[5]; printf("please input sort number:" ...
- (27)打鸡儿教你Vue.js
v-for 数组参数的顺序 当含有index时,以前传递的参数顺序是: (index, value).现在(value, index) ready替换使用新的mounted钩子代替,通过使用mount ...
- OpenStack Restful API框架介绍
1 pecan框架介绍 1.1 什么是pecan pecan是一个轻量级的python web框架,最主要的特点是提供了简单的配置即可创建一个wsgi对象并提供了基于对象的路由方式. 主要提供的功 ...
- 安装pdo_dblib扩展连接SQLserver
1.先得安装freetdswget ftp://ftp.freetds.org/pub/freetds/stable/freetds-1.1.5.tar.gztar zxvf freetds-1.1. ...
- P1041 传染病控制——暴力遍历所有相同深度的节点
P1041 传染病控制 说实话这种暴力我还是头一次见,每次病毒都会往下传染一层: 数据范围小,我们可以直接枚举当前层保护谁就好了: 用vector 记录相同层数的节点:维护已经断了的点: 如果超出最底 ...
- 小程序的基本原生js使用
1.点击事件 <a data-current="{{setting.current}}" bindtap="clickcurrent" style=&qu ...
- LDAP服务端 - 调研
一.服务端实现 1.OpenLdap 2.ApacheDS 二.OpenLdap 1.https://segmentfault.com/a/1190000014683418 2.https://www ...
- java.lang.ClassNotFoundException: org.apache.jsp.error_jsp
缺少jar包 第一个:standard-1.1.2.jar 第二个:jstl-1.2.jar
- c语言程序课程设计题目
<C语言程序设计>课程设计课题表 一.A类 .职工信息管理系统设计 职工信息包括职工号.姓名.性别.年龄.学历.工资.住址.电话等(职工号不重复).试设计一职工信息管理系统,使之能提供以下 ...
- 卸载node和npm
sudo npm uninstall npm -g yum remove nodejs npm -y