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通讯,但是上一个例子只能实现一个服务端和一个客户端之间的通讯,如果有多个客户端连接服务端,则需要通过多线程技术来实 ...
随机推荐
- 手机版本高于xcode,xcode的快速升级
iPhone手机更新版本,xcode未更新时,不能真机测试 在xcode show in finder里面添加最新iPhone 版本 重启xcode即可 真机测试
- Myeclipese建立servelet时出现带有javax.servlet.http.HttpServlet;变成了红色的解决方法
如下图 上面这部分都变成了红色,说明servlet-api.ja还没有导入进来,只需要单击项目名称然后properties--java Build Path--Libraties--MyEclipse ...
- 合同主体列表添加两条合同主体,返回合并支付页面,支付总弹"请选择合同主体",删除后,竟然还能支付(改合并支付页面的字段状态)
bug描述: 操作步骤:1.进入"商标续展"产品详情页面,点击立即购买(数量设为2),进入合并订单界面,选择合同主体,点击全部,清空所有合同主体2.新建合同主体保存,设置该合同主体 ...
- Codeforces 209 C. Trails and Glades
Vasya went for a walk in the park. The park has n glades, numbered from 1 to n. There are m trails b ...
- sprint2总结
在sprint第二阶段的学习过程中,前期和后期在学校网络的支持下我们成功的延迟了把代码上传github的时间,在我们自己感觉上看,完成项目的质量比较理想,在经过sprint第一阶段的学习后,部分上的问 ...
- createjs学习二之flash转canvas学习1
设置发布 或者 导出参数设置 c_lib_main c_images_main/ 导出之后的文件 打开导出的html文件可以看到如下,,可以正常显示的,,只是stop了还不能动 给舞台上某一元素添加点 ...
- linux suse系统防火墙端口开放配置
1.切换到root用户下 2.进入到/etc/sysconfig/SuSEfirewall2 3.修改FW_SERVICES_EXT_TCP=" 22 80 8080 8081 8082 8 ...
- jquery toggle方法
$("#myDiv").toggle(function () { alert(1); }, function () { alert(2); }); 某种需求下可以替代click事件 ...
- 一个简单的js实现倒计时函数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 实时控制软件设计第一周作业-汽车ABS软件系统案例分析
汽车ABS软件系统案例分析 ABS 通过控制作用于车轮制动分泵上的制动管路压力,使汽车在紧急刹车时车轮不会抱死,这样就能使汽车在紧急制动时仍能保持较好的方向稳定性. ABS系统一般是在普通制动系统基础 ...