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通讯,但是上一个例子只能实现一个服务端和一个客户端之间的通讯,如果有多个客户端连接服务端,则需要通过多线程技术来实 ...
随机推荐
- oracle TBL$OR$IDX$PART$NUM BUG案例处理过程
通过AWR报告发现数据库cpu告警的问题,定位产生问题的sql语句 首先查看SQL的执行计划 ) FROM cmds.psn_cntr_holder a ,cmds.pol_attrib c ,cmd ...
- 关于iis8.5中发布的网站无法连接数据库的解决方案。
发布的网站在浏览时出现如下提示: “/”应用程序中的服务器错误. 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL ...
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
http://blog.csdn.net/totogo2010/article/details/8048652/
- window的对象有哪些(笔记)
window的主对象主要有如下几个: document 对象: frames 对象: history 对象: location 对象: navigator 对象: screen 对象: 全局变量和函数 ...
- CMake undefined reference to `QTcpServer::QTcpServer(QObject*)'的解决
1. 这是因为工程link不到network的库,因此除了要包含头文件 #include 之外,还需要在.pro文件中加入: QT += network 2. 对于CMake,需添加Net ...
- RPM包管理命令rpm
RPM包管理器是Linux系统中最早的软件包管理软件之一,也是目前最流行的软件包管理器,许多发行版都使用RPM作为默认的软件包管理软件. RPM软件包名称格式: samba-client-3.0.33 ...
- 点击链接跳转到固定div位置处(类似锚点链接)
$('.joinbtn').click(function(){ var a = $("#contact").offset().top;$("html,body" ...
- ssh无密码通信设置
■单向登陆配置:1.在本地机器中的~/.ssh/目录下执行下命令#ssh-keygen -t dsa然后全部回车,采用默认值.生成了一对密钥,id_dsa和id_dsa.pub,存放在用户目录的~/. ...
- 关于InvokeRequired与Invoke
from:http://www.th7.cn/Program/net/201306/140033.shtml Windows 窗体中的控件被绑定到特定的线程,不具备线程安全性.因此,如果从另一个线程调 ...
- Eclipse开发快捷键技巧
1.alt+?或alt+/:自动补全代码或者提示代码 这个是我最得意的快捷键组合了,尤其是当输入syso几个字符之后,2个手指轻松按下这2个键的时候,自动就补全System.out.println() ...