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. 【5集iCore3_ADP演示视频】5-5 iCore3应用开发平台示波器和信号源校准

    iCore3双核心应用开发平台基于iCore3双核心板,包含ARM.FPGA.7寸液晶屏.双通道数字示波器.任意波发生器.电压表等模块,是一款专为电子爱好者设计的综合性电子学习系统. [视频简介]本视 ...

  2. MySQL 5.6 记录 SQL 语句与慢查询

    环境: MySQL 如果需要记录 MySQL 的查询语句,需要在配置文件(Linux 下为 my.cnf,Windows 下为 my.ini)中添加配置: general_log = ON gener ...

  3. jQuery File Upload 单页面多实例的实现

    jQuery File Upload 的 GitHub 地址:https://github.com/blueimp/jQuery-File-Upload 插件描述:jQuery File Upload ...

  4. spring mvc controller间跳转 重定向 传参 (转)

    转自:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ 1. 需求背景     需求:spring MVC框架contr ...

  5. vmstat和iostat

    一.vmstat1.命令示例#vmstat 5每5秒输出一次 2.输出详解procs -----------memory---------- ---swap-- -----io---- --syste ...

  6. Java this关键字

    this 关键字有三个应用: 1.this调用本类中的属性,也就是类中的成员变量 2.this调用本类中的其他方法 3.this调用本类中的其他构造方法,调用时要放在构造方法的首行 来看下面这段代码: ...

  7. LeetCode Coin Change

    原题链接在这里:https://leetcode.com/problems/coin-change/ 题目: You are given coins of different denomination ...

  8. trunk 的坑

    三层交换机A和三层交换机B之间原本配置有trunk口,如再用trunk连二层交换机会导致环路,网络不通.将L3 A和L3-B之间断开正常.

  9. django学习遇到的问题解决方式

    1.django.core.exceptions.ImproperlyConfigured: The TEMPLATE_DIRS setting must be a tuple. Please fix ...

  10. 使用intellij的svn时提示出错: Can't use Subversion command line client: svn.Errors found while svn working copies detection.

    使用Intellij的svn时提示出错:Can't use Subversion command line client: svn. Errors found while svn working co ...