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 多线程通讯的更多相关文章

  1. java socket 多线程通讯 使用mina作为服务端

    客户端代码不变,参照 http://www.cnblogs.com/Westfalen/p/6251473.html 服务端代码如下: import java.io.IOException; impo ...

  2. java socket 多线程网络传输多个文件

    http://blog.csdn.net/njchenyi/article/details/9072845 java socket 多线程网络传输多个文件 2013-06-10 21:26 3596人 ...

  3. java Socket多线程聊天程序

    参考JAVA 通过 Socket 实现 TCP 编程 参考java Socket多线程聊天程序(适合初学者) 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包 ...

  4. Java Socket 多线程聊天室

    本来这次作业我是想搞个图形界面的,然而现实情况是我把题意理解错了,于是乎失去了最初的兴致,还是把程序变成了功能正确但是“UI”不友好的console了,但是不管怎么样,前期的图形界面的开发还是很有收获 ...

  5. Java socket 多线程编程 示例

    参照网上代码: 1.工程: 2.代码: Client.java package com.my.socket.test; import java.io.BufferedReader; import ja ...

  6. JAVA SOCKET多线程等待接受客户端信息实现

    服务端程序: public class Demo { public static void main(String[] args) { // TODO 自动生成的方法存根 try { ServerSo ...

  7. java socket 服务器多线程 数据转发的研究实践

    项目中借鉴了以下资料: https://www.cnblogs.com/whenever/p/5526420.html https://www.cnblogs.com/jpwz/p/5715852.h ...

  8. Java 多线程Socket编程通讯--实现聊天室代码

    1.创建服务器类 import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import ja ...

  9. java socket通讯(二)处理多个客户端连接

    通过java socket通讯(一) 入门示例,就可以实现服务端和客户端的socket通讯,但是上一个例子只能实现一个服务端和一个客户端之间的通讯,如果有多个客户端连接服务端,则需要通过多线程技术来实 ...

随机推荐

  1. harris角点检测的学习

    Harris通过运用微分运算和自相关矩阵改进了Moravec角点检测算法.用微分算子重新定义灰度强度变化的公式,其灰度强度变化表示为: 式中的wu,v为高斯窗口在(u,v)处的系数.X,Y它们是像素点 ...

  2. 安卓初級教程(1):@Database(1)

    package com.example.android.db01; import android.app.Activity; import android.content.ContentValues; ...

  3. 在Windows下使用Git

    关于Git git是当今最流行的版本控制系统,因为是诞生在Linux操作系统下,因此Linux对git天生有最好的支持,但好在各路大牛的努力下,目前在Windows也能较为完美的使用.以下便是我使用g ...

  4. php多线程详解

    在说明多线程的题前,需要弄清楚以下几个问题 1,ts 和 nts的区别 Thread Safe和NoneThread Safe 先说windows的,在php官网,在windows区域有在文件下在有 ...

  5. java.util.zip获取Zip文件条目InputStream

    package com.test; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import ja ...

  6. PHP中GBK和UTF8乱码解决方案

    我用的appserv-win32-2.5.10做的环境,装这个包的时候用默认的utf8编码.在写数据库连接文件时,写成: $conn = mysql_connect("$host" ...

  7. LeetCode Find All Duplicates in an Array

    原题链接在这里:https://leetcode.com/problems/find-all-duplicates-in-an-array/ 题目: Given an array of integer ...

  8. LeetCode Find the Celebrity

    原题链接在这里:https://leetcode.com/problems/find-the-celebrity/ 题目: Suppose you are at a party with n peop ...

  9. 批处理ODBC配置

    工作需要来回切换ODBC配置,用同一个DSN名称访问不同的数据库. 对于linux的odbc配置在odbc.ini文件里,替换不同的文件就可以切换了. 而windows的配置一直通过控制面板里的odb ...

  10. Redis集群~StackExchange.redis连接Twemproxy代理服务器

    回到目录 本文是Redis集群系列的一篇文章,主要介绍使用StackExchange.Redis进行Twemproxy(文中简称TW)代理服务的连接过程,事务上,对于TW来说,我们需要理解一下它的物理 ...