Java使用socket实现两人聊天对话
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner; /**
* User: HYY
* Date: 13-10-29
* Time: 下午9:57
* To change this template use File | Settings | File Templates.
*/
public class Server { public static final int SERVER_PORK = 10000; public static void main(String[] args) throws IOException, InterruptedException {
ServerSocket serverSocket = new ServerSocket(SERVER_PORK);
System.out.println("正在监听 " + SERVER_PORK + " 端口!");
Socket socket;
BufferedReader bufferedReader;
while (true) {
socket = serverSocket.accept();
System.out.println("一客户端连接。");
Thread writerThread = new Thread(new MyServerWriter(socket));
writerThread.start(); bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
try {
String msg;//客户端发过来的信息
while ((msg = bufferedReader.readLine()) != null) {
System.out.println("##客户端:" + msg);
}
} catch (IOException e) {
try {
if (!socket.isClosed()) {
socket.close();
}
} catch (IOException e1) {
System.out.println("关闭socket出现错误");
}
}
System.out.println("提示:当前客户端已经断开连接,服务器正等待下一个客户端的连接。");
}
}
} class MyServerWriter implements Runnable {
private Socket socket = null;
private PrintWriter printWriter;
private Scanner scanner; public MyServerWriter(Socket socket) throws IOException {
this.socket = socket;
scanner = new Scanner(System.in);
printWriter = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
} @Override
public void run() {
String msg;//要发送的信息
try {
while ((msg = scanner.nextLine()) != null) {
if (msg.equals("88")) {
if (!socket.isClosed()) {
System.out.println("服务器手动与客户端断开");
socket.close();
}
break;
}
printWriter.println(msg);
}
} catch (IOException io) {
System.out.println("关闭socket出现问题");
} catch (Exception e) {
System.out.println("异常关闭客户端(可能是直接关闭退出窗口)");
}
}
}
import java.io.*;
import java.net.Socket;
import java.util.Scanner; /**
* Created with IntelliJ IDEA.
* User: HYY
* Date: 13-10-29
* Time: 下午10:31
* To change this template use File | Settings | File Templates.
*/
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1", 10000);
System.out.println("连接服务器成功!如果想断开连接请输入88(回车)");
new Thread(new MyClientWriter(socket)).start(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
try {
String msg;//服务器发过来的信息
while ((msg = bufferedReader.readLine()) != null) {
System.out.println("##服务器:" + msg);
}
} catch (IOException e) {
System.out.println("警告:断开连接!");
try {
if (!socket.isClosed()) {
socket.close();
}
} catch (IOException e1) {
System.out.println("读取线程:关闭socket出现错误");
}
}
System.exit(1);
}
} class MyClientWriter implements Runnable{
private Socket socket = null;
private PrintWriter printWriter;
private Scanner scanner; public MyClientWriter(Socket socket) throws IOException {
this.socket = socket;
scanner = new Scanner(System.in);
printWriter = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
} @Override
public void run() {
String msg;//要发送的信息
try {
while ((msg = scanner.nextLine()) != null) {
System.out.println("isClosed="+socket.isClosed());
if(socket.isClosed()) {
break;
} else {
if(msg.equals("88")) {
break;
}
}
printWriter.println(msg);
}
} catch (Exception e) {
// System.out.println("异常关闭客户端(可能是直接关闭退出窗口)");
}
System.out.println("写线程准备死亡");
}
}
Java使用socket实现两人聊天对话的更多相关文章
- java swing+socket实现多人聊天程序
swing+socket实现多人聊天程序 1.准备工作 先看效果: 客户端项目结构图: 服务端项目结构图: 2.运行原理 服务端 先开一个线程serverListerner,线程中开启一个Server ...
- java socket之多人聊天室Demo
一.功能介绍 该功能实现了一个类似QQ的最简单多人聊天室,如下图所示. 二.目录结构 三.服务端 1)SocketServer类,该类是服务端的主类,主要负责创建聊天窗口,创建监听客户端的线程: pa ...
- 多线程+socket实现多人聊天室
最近在学习多线程的时候打算做一个简单的多线程socke聊天的程序,结果发现网上的代码都没有完整的实现功能,所以自己实现了一个demo: demo功能大致就是,有一个服务端负责信息转发,多个客户端发送消 ...
- 基于Socket实现多人聊天室
当前支持: 1.仅文字 2.加入聊天室提醒 3.退出聊天室提醒 可能出现的BUG: 1.可能出现客户端发送信息后不能及时推送,需要下一个客户端发送信息后一起推送 服务端代码: 1 package co ...
- java-网络通信--socket实现多人聊天(基于命令行)
先编写最简答的服务器 思路 1编写一个实现Runnable接口的静态内部类 ServerC,便于区分每个客户端 1.1 获取客户端数据函数 public String remsg() 1.2 转发消息 ...
- Java 多线程Socket编程通讯--实现聊天室代码
1.创建服务器类 import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import ja ...
- java版两人聊天程序
server.java import java.io.*; import java.net.*; import java.text.SimpleDateFormat; import java.util ...
- 【Java】Socket+多线程实现控制台聊天室
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827212.html 聊天室程序的结构图: 架构解释: Server服务器相当于一个中转站,Client客户端 ...
- java NIO 实例之多人聊天
关键抽象 1.定义一个HashMap<String,SocketChannel>用户存储每个用户的管道. 2.服务端监听read事件,获取消息后轮询hashmap发送消息给用户模型内的所有 ...
随机推荐
- PHP之curl
当我第一次接触curl的时候,看文档,以及网上search各种资料,官方(http://cn2.php.net/manual/en/intro.curl.php)的解释是,这是某大牛写的一个libcu ...
- nopCommerce添加支付插件
之前完成了nopCommerce和汉化以及配置,今天继续对nopCommerce的研究,为了能够完成购物,我们就要将伟大的支付宝添加至其中了.支付宝插件下载 将Nop.Plugin.Payments. ...
- java.lang.RuntimeException: Unable to instantiate activity ComponentInfo异常总结
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo异常总结 做android开发的可能都碰到"j ...
- Android之 Fragment
什么是Fragment: Android是在Android 3.0 (API level 11)开始引入Fragment的. 可以把Fragment想成Activity中的模块,这个模块有自己的布局, ...
- ReactiveCocoa入门教程——第一部分(转)
作为一个iOS开发者,你写的每一行代码几乎都是在响应某个事件,例如按钮的点击,收到网络消息,属性的变化(通过KVO)或者用户位置的变化(通过CoreLocation).但是这些事件都用不同的方式来处理 ...
- OC3_字符串分割
// // main.m // OC3_字符串分割 // // Created by zhangxueming on 15/6/11. // Copyright (c) 2015年 zhangxuem ...
- 高能物理/HyperPhysics的网站/Website
参考: 基础物理-高能物理[Hyperphysics]
- enum 与 #define
enum 与 #define 一.为什么既要有enum,又要define enum is derived from enumerate, from ex- + number,字面意思就是用数字排列,报 ...
- 生产者-消费者模型的3种Java实现:synchronized,signal/notifyAll及BlockingQueue
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3555111.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- DOM五大对象
1.Window 对象:Window 对象表示浏览器中打开的窗口. 如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个 ...