java socket 多线程通讯
1.目录结构

2.Server.java 代码
package de.bvb.server; import java.net.ServerSocket;
import java.net.Socket; import de.bvb.util.IOUtils;
import de.bvb.util.ReaderThread;
import de.bvb.util.WriterThread; /**
*参考:http://www.cnblogs.com/jpwz/p/5705160.html
*/
public class Server {
public static void main(String[] args) {
Server server = new Server();
server.init();
} private void init() {
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(9999);
System.out.println("服务已启动..."); while (true) {
socket = serverSocket.accept();
System.out.println(socket.getInetAddress().getHostAddress() + "@" + socket.getPort() + " 已连接");
// 分别启动读写线程
new ReaderThread(socket).start();
new WriterThread(socket).start();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
IOUtils.closeCloseable(serverSocket);
} }
}
3.client.java 代码
package de.bvb.client; import java.net.Socket; import de.bvb.util.IOUtils;
import de.bvb.util.ReaderThread;
import de.bvb.util.WriterThread; public class Client {
public static void main(String[] args) {
Client client = new Client();
client.init();
} private void init() {
try {
Socket socket = new Socket("127.0.0.1", 9999);
System.out.println(socket.getInetAddress().getHostAddress() + "@" + socket.getLocalPort() + " 已连接上服务器"); new ReaderThread(socket).start();
new WriterThread(socket).start();
} catch (Exception e) {
e.printStackTrace();
} }
}
4.util下的代码
package de.bvb.util; import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket; public class ReaderThread extends Thread {
private Socket socket; public ReaderThread(Socket socket) {
this.socket = socket;
} @Override
public void run() {
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String content;
while (null != (content = reader.readLine())) {
System.out.println(content);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
IOUtils.closeCloseable(reader, socket);
}
}
}
package de.bvb.util; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket; public class WriterThread extends Thread {
private Socket socket; public WriterThread(Socket socket) {
this.socket = socket;
} @Override
public void run() {
BufferedWriter writer = null;
BufferedReader reader = null;
try {
String name = socket.getInetAddress().getHostAddress() + "@" + socket.getLocalPort();
reader = new BufferedReader(new InputStreamReader(System.in));
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String content;
while (null != (content = reader.readLine())) {
System.out.println(name + "说: " + content);
writer.write(name + "说: " + content + "\n");
writer.flush();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeCloseable(reader, writer, socket);
}
}
}
package de.bvb.util; import java.io.Closeable;
import java.io.IOException; public class IOUtils { public static void closeCloseable(Closeable... closeable) {
try {
if (closeable != null && closeable.length > 0) {
for (Closeable c : closeable) {
if (c != null) {
c.close();
}
}
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
java socket 多线程通讯的更多相关文章
- java socket 多线程通讯 使用mina作为服务端
客户端代码不变,参照 http://www.cnblogs.com/Westfalen/p/6251473.html 服务端代码如下: import java.io.IOException; impo ...
- java socket 多线程网络传输多个文件
http://blog.csdn.net/njchenyi/article/details/9072845 java socket 多线程网络传输多个文件 2013-06-10 21:26 3596人 ...
- java Socket多线程聊天程序
参考JAVA 通过 Socket 实现 TCP 编程 参考java Socket多线程聊天程序(适合初学者) 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包 ...
- Java Socket 多线程聊天室
本来这次作业我是想搞个图形界面的,然而现实情况是我把题意理解错了,于是乎失去了最初的兴致,还是把程序变成了功能正确但是“UI”不友好的console了,但是不管怎么样,前期的图形界面的开发还是很有收获 ...
- Java socket 多线程编程 示例
参照网上代码: 1.工程: 2.代码: Client.java package com.my.socket.test; import java.io.BufferedReader; import ja ...
- JAVA SOCKET多线程等待接受客户端信息实现
服务端程序: public class Demo { public static void main(String[] args) { // TODO 自动生成的方法存根 try { ServerSo ...
- java socket 服务器多线程 数据转发的研究实践
项目中借鉴了以下资料: https://www.cnblogs.com/whenever/p/5526420.html https://www.cnblogs.com/jpwz/p/5715852.h ...
- Java 多线程Socket编程通讯--实现聊天室代码
1.创建服务器类 import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import ja ...
- java socket通讯(二)处理多个客户端连接
通过java socket通讯(一) 入门示例,就可以实现服务端和客户端的socket通讯,但是上一个例子只能实现一个服务端和一个客户端之间的通讯,如果有多个客户端连接服务端,则需要通过多线程技术来实 ...
随机推荐
- Invoke-Command和-ComputerName 效率比较
看到网上有文章说Invoke-Command的方式相较其他方式的效率要高,特地试验了一下,但是这个实验不是很好: 机器只有2台 0. 用Get-WinEvent,日志数=200,Invoke方式快 1 ...
- PyCharm2016.2专业版注册码
43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...
- .NET Framework基础知识总结
之前给大家总结了java的面试几次技巧总结,同学们看了觉得还是不错,能够得到大家的认可,感觉还是挺不错的.现在又有同学来想小编索要.NET面试的总结了,好吧.谁让小编这么好呢!以下是.NET面试之框架 ...
- 高性能Server---Reactor模型
原文地址:http://www.ivaneye.com/2016/07/23/iomodel.html 无处不在的C/S架构 在这个充斥着云的时代,我们使用的软件可以说99%都是C/S架构的! 你发邮 ...
- java机试要点
Java机试准备 一般结构: import java.util.Scanner; public class Main{ public static void main(String[] args) ...
- 推荐两款免费的优质云服务MongoLab和RedisLabs
http://blog.didispace.com/liang-kuan-mian-fei-de-you-zhi-yun-fu-wu-mongolabhe-redislabs/ 由于最近想给白猫计划资 ...
- 学霸数据处理项目之数据处理网页以及后台以及C#代码部分开发者手册
写在前面,本文将详细介绍学霸数据处理项目中的数据处理网页与后台函数,以及c#代码中每一个方法的意义及其一些在运行方面需要注意的细节,供开发人员使用,开发人员在阅读相关方法说明时请参照相关代码,对于本文 ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架钜献 V3.0 版本强势发布
继上个版本“RDIFramework.NET V2.9版本”的推出,受到了重多客户的认可与选择,V2.9版本是非常成功与稳定的版本,感谢大家的认可与长期以来的关注与支持.V3.0版本在V2.9版本的基 ...
- Leetcode: Serialize and Deserialize BST
Serialization is the process of converting a data structure or object into a sequence of bits so tha ...
- linux------------Another app is currently holding the xtables lock. Perhaps you want to use the -w option?
今天突然遇到这个么一个奇葩的问题,直接说问题的原因:原因是我们创建了一个计划任务,这个计划任务是一分钟执行一次,是iptables封ip的一个sh脚本.由于攻击我们的ip太多,已经达到了几千个,这个脚 ...