Java Socket多线程异步通信
2019独角兽企业重金招聘Python工程师标准>>>
服务端
package com.ninemax.socket;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 SocketServer {public static void main(String[] args) {try {// 监听端口ServerSocket server = new ServerSocket(9999);// 获取客户端链接Socket client = server.accept();// 获取客户端输入流BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));// 获取客户端输出流PrintWriter out = new PrintWriter(client.getOutputStream());// 获取系统输入流BufferedReader sys_in = new BufferedReader(new InputStreamReader(System.in));// 启动接收消息线程new ReceiveMsgThread(server, in, out, sys_in, client).start();// 启动发送消息线程new SendMsghread(out, sys_in, true).start();} catch (IOException e) {e.printStackTrace();}}
}
客户端
package com.ninemax.socket;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;public class SocketClient {public static void main(String[] args) {try {// 获取客户端链接Socket client = new Socket(InetAddress.getLocalHost(), 9999);System.out.println("客户端是否连接成功:" + client.isConnected());// 获取客户端输入流BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));// 获取系统输入流BufferedReader sys_in = new BufferedReader(new InputStreamReader(System.in));// 获取客户端输出流PrintWriter out = new PrintWriter(client.getOutputStream());// 启动发送消息线程new SendMsghread(out, sys_in, false).start();// 启动接收消息线程new ReceiveMsgThread(client, in, out, sys_in).start();} catch (UnknownHostException e) {System.out.println("Host is error!");e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
发送消息线程
package com.ninemax.socket;import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;public class SendMsghread extends Thread {// 输出流PrintWriter out;// 输入流BufferedReader in;// 判断服务器是否启动boolean isServer;public SendMsghread(PrintWriter out, BufferedReader in, boolean isServer) {this.out = out;this.in = in;this.isServer = isServer;}@Overridepublic void run() {SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {while(true){if(isServer){out.println("Server "+sf.format(new Date())+"\n\t"+ in.readLine());}else{out.println("client "+sf.format(new Date())+"\n\t"+ in.readLine());}out.flush();}} catch (IOException e) {e.printStackTrace();}}
}
接收消息线程
package com.ninemax.socket;import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class ReceiveMsgThread extends Thread {// 输入流BufferedReader in;// 输入流BufferedReader sys_in;// 输出流PrintWriter out;// 服务端socketServerSocket server;// 客户端socketSocket client;public ReceiveMsgThread(ServerSocket server, BufferedReader in,PrintWriter out, BufferedReader sys_in, Socket client) {this.in = in;this.server = server;this.client = client;this.out = out;this.sys_in = sys_in;}public ReceiveMsgThread(Socket client,BufferedReader in, PrintWriter out,BufferedReader sys_in) {this.in = in;this.client = client;this.out = out;this.sys_in = sys_in;}@Overridepublic void run() {try {while(true){String info = in.readLine();while(info !=null){System.out.println(info);info = in.readLine();}if(in.readLine().equals("end")){break;}}in.close();out.close();sys_in.close();if(client != null){client.close();}server.close();} catch (IOException e) {e.printStackTrace();}}
}
运行结果图
转载于:https://my.oschina.net/Tsher2015/blog/1510598
Java Socket多线程异步通信相关推荐
- 文件绑定java socket多线程网络传输多个文件Strut2教程-java教程
题记:写这篇博客要主是加深自己对文件绑定的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. 由于要需究研了下用java socket传输文件,由于要需传输多个文件,因此,采用了多线程 ...
- [转载]Java Socket实战之二 多线程通信
上一篇文章说到怎样写一个最简单的Java Socket通信,但是在上一篇文章中的例子有一个问题就是Server只能接受一个Client请求,当第一个Client连接后就占据了这个位置,后 续Clien ...
- 利用Java GUI,结合Java Socket,Java多线程,服务器,制作一个简单的具有界面的多用户实时聊天程序(从GUI,到Socket,到多线程,到服务器,项目级别详细教程)
目录 规划 Java GUI设计 Java Socket Java 服务器 利用 IntelliJ IDEA软件为例 首先,我们应当了解,像运行在两台电脑或者手机终端这样的程序一般是没有办法直接相互发 ...
- Java Socket编程 - 基于TCP方式的二进制文件传输【转】http://blog.csdn.net/jia20003/article/details/8248221...
此人博客挺好的,推荐一个! 一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成. 除了基于TCP的二进制文件传输,还演示了JAVA Swing的一些编程技巧,Demo程序 实 ...
- Java 并发/多线程教程(五)-相同线程
本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获.由于个人水平有限,不对之处还望矫正! 相同线程是一并发框架模型,是一个单线程系统向外扩展成多个单线程的系统.这样的结果就是 ...
- Java Socket编程 - 基于TCP方式的二进制文件传输
一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成. 除了基于TCP的二进制文件传输,还演示了JAVA Swing的一些编程技巧,Demo程序 实现主要功能有以下几点: 1. ...
- 简单java socket_基于Java Socket实现一个简易在线聊天功能(一)
最近做了一个项目,其中有一个在线网页交流的需求,好久没写代码了,手都生疏了,于是先写demo练练手,分享到脚本之家平台,以此做个记录,方便自己和大家使用. 先给大家说下实现步骤分这样几大步: 1.使用 ...
- socket多线程方式案例
记下来,方便以后查看 User类 1 package com.xujingyang.ThreadSocket; 2 3 import java.io.Serializable; 4 5 public ...
- java Socket(二)
上次做了一个java socket一对一通信的例子这次来写一个一对多的通信,这里我们使用java的多线程来实现 首先来看一下服务类 /** * */ package com.dnion.socket; ...
最新文章
- 2022-2028年中国聚乳酸降解塑料行业市场运营格局及投资前景趋势报告
- SICP 1.21 1.22 1.23 1.24
- 面试美团,面试官突然问我 Java “锁” ,我哭了
- 无线WIFI上网监控串联部署方案
- rhel6mysql管理_RHEL 6平台MySQL数据库服务器的安装方法
- 仓库管理软件,仓库管理系统,希创条码,wms仓库管理软件
- 看英文看的头疼的一次
- 用 Python 分析《红楼梦》(2)
- 时间精力管理4象限法
- 继Facebook之后,微软正式宣布:全面进军「元宇宙」
- Java-2学习之Eclipse简介
- Android app 移动推送遇到的问题(多问题集合)
- 机器学习入门的书单(数据挖掘、模式识别等一样)
- dlopen failed总结
- A股十大股东持股数据查询网站的数据库设计
- html转换成pdf在线转换器,pdf转换成HTML转换器
- 分析波卡与以太坊2.0有什么不一样的地方?
- 2021年1月程序员工资统计,平均14915元
- new String 详解
- 山东大学数据结构课程设计实验五(低风险出行系统)
热门文章
- Unrecognised tag: #39;encoding#39; (position: START_TAG seen ...lt;/versiongt;\r\n\t\t\t\tlt;en...
- Spring 常用工具类
- 我的2011就这样混掉了
- 当你打开的程序在任务栏出现两个一样的怎么办?
- 298.2亿美元的机器人市场,为什么过得有点“惨”
- OpenGL ES3 0实现简单粒子火焰效果
- 3星|《财经》年刊:各行业专家学者的现状分析与短期预测
- rtmp Chunk stream ID 说明
- py02-python基础
- Zookeeper源码编译为Eclipse工程(转)