[Socket]Socket聊天小程序
一个简单是Socket聊天小程序,读写操作在不同的线程中。服务器端采用线程池。
1、Server
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; public class Server
{
private static final ExecutorService threadWorkers = Executors
.newCachedThreadPool(); private void start() throws IOException
{
ServerSocket server = new ServerSocket(8899);
while (true)
{
Socket socket = server.accept();
threadWorkers.execute(new ThreadWorker(socket));
} } public static void main(String[] args) throws IOException
{
Server server = new Server();
server.start();
}
}
2、Client
import java.net.Socket; public class Client
{
public static void main(String[] args) throws Exception
{
Socket socket = new Socket("127.0.0.1", 8899);
new Thread(new InputReceiverAndSender(System.in,socket.getOutputStream())).start();
new Thread(new SocketReader("Server", socket.getInputStream())).start();
}
}
3、InputReceiverAndSender
import java.io.*; public class InputReceiverAndSender implements Runnable
{
private BufferedReader receiver; private BufferedWriter sender; private InputStream input; static int i = 0; String name; public InputReceiverAndSender(InputStream input, OutputStream output)
{
super();
name = ""+(i++);
this.input = input;
this.receiver = new BufferedReader(new InputStreamReader(input));
this.sender = new BufferedWriter(new OutputStreamWriter(output));
} public void run()
{
String message = null;
try
{
try
{
do
{
synchronized (input)
{
message = receiver.readLine();
}
System.out.println(name+":"+message);
sender.write(message);
// 写入行结束标志,如果省略这句,另一端是无法读入的
sender.newLine();
sender.flush();
}
while (message != null);
}
finally
{
receiver.close();
sender.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
4、SocketReader
import java.io.*; public class SocketReader implements Runnable
{
private BufferedReader receiver;
private String name; public SocketReader(String name, InputStream input)
{
super();
this.name = name;
this.receiver = new BufferedReader(new InputStreamReader(input));
} public void run()
{
try
{
try
{
String message = null;
while ((message = receiver.readLine()) != null)
{
System.out.println(name + ":" + message);
}
}
finally
{
receiver.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
5、ThreadWorker
import java.io.IOException;
import java.net.Socket; public class ThreadWorker implements Runnable
{ private static int id = 1; private Socket socket; public ThreadWorker(Socket socket)
{
this.socket = socket;
} @Override
public void run()
{
System.out.println("connected...");
// 输入及发送线程
try
{
new Thread(new InputReceiverAndSender(System.in,
socket.getOutputStream())).start();
// 读线程
new Thread(new SocketReader("Agent" + (id++),
socket.getInputStream())).start();
}
catch (IOException e)
{
e.printStackTrace();
} }
}
[Socket]Socket聊天小程序的更多相关文章
- netty使用以及聊天小程序
<从零开始搭建游戏服务器>Netty导入创建Socket服务器 Netty入门教程 Netty 聊天小程序
- Netty学习——基于netty实现简单的客户端聊天小程序
Netty学习——基于netty实现简单的客户端聊天小程序 效果图,聊天程序展示 (TCP编程实现) 后端代码: package com.dawa.netty.chatexample; import ...
- Netty 聊天小程序
这节讲解基于 Netty 快速实现一个聊天小程序. 一.服务端 1. SimpleChatServerHandler(处理器类) 该类主要实现了接收来自客户端的消息并转发给其他客户端. /** * 服 ...
- 类似微信聊天小程序-网易云信,IM DEMO小程序版本
类似微信聊天小程序-网易云信,IM DEMO小程序版本 代码地址: https://github.com/netease-im/NIM_Web_Weapp_Demo 云信IM DEMO 小程序版本 ( ...
- 答题小程序开发之socket编程 微信小程序答题 直播答题开发 直播弹幕使用web socket编程
最近有一个项目很火,那就是直播答题的,接到公司的这个任务,开发直播答题的聊天室功能.在线的人相互聊天.之前做过类似的,当时都是使用的ajax轮询的,这种非常的耗费服务器.所以这次就开始使用socket ...
- socket 收发报文小程序
需要注意,由于是从文件读取,而WINDOWS自带的文本文档程序,亲测对于UTF-8文件会不可见地在文件头多出3个字节.另外回车换行也是不可见字节,需要考虑到. package com.test.com ...
- java socket编程--聊天小案例
很久以前写过socket聊天室,都快忘完了,心血来潮又重新写一遍. 服务器端: package com.fancy; import java.io.BufferedReader; import jav ...
- 基于JAVA网络编程的聊天小程序
package com.neusoft.edu.socket; import java.io.BufferedReader; import java.io.IOException; import ja ...
- Python实现群聊天小程序代码
群聊服务端 服务端Server.py代码如下: # -*- coding: utf-8 -*- #!/usr/bin/env python # @Time : 2018/5/18 16:05 # @D ...
随机推荐
- Kotlin入门(4)声明与操作数组
上一篇文章介绍了基本变量类型在Kotlin中的用法,不过这只针对单个变量,如果要求把一组相同类型的变量排列起来,形成一个变量数组,那又该如何声明和操作呢? 在Java中声明数组,跟在C语言中声明是一样 ...
- Kotlin入门(10)七十二变的输入参数
上一篇文章介绍了Kotlin对函数的基本用法,包括函数的定义.输入参数的声明.输出参数的声明等等,这些足够对付简单的场合了.当然了,倘若一门新语言仅仅满足于这些雕虫小技,那也实在没什么前途.既然Kot ...
- web应用
实现HttpServlet的Web应用 <dependency> <groupId>javax.servlet</groupId> <artifactId&g ...
- Expo大作战(三十)--expo sdk api之Permissions(权限管理模块),Pedometer(计步器api)
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- 【HANA系列】SAP HANA XS的JavaScript安全事项
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Jav ...
- input输入的数据只允许整数和浮点型数据
//第一步:引入jquery //第二步:input输入框绑定该函数 例如:<input type="text" name="price" onInput ...
- 3.6Python数据处理篇之Numpy系列(六)---Numpy随机函数
目录 目录 前言 (一)基础的随机函数 (二)轴的随机函数 (三)概率的随机函数 目录 前言 前一段日子学了numpy,觉得无趣,没有学完,不过后来看了看matplotlib,sympy等库时,频频用 ...
- Lua与C交互之基础操作(1)
@(语言) Lua是一个嵌入式的语言,可以Lua可以作为程序库用来扩展应用的功能,也可以注册有其他语言实现的函数,这些函数可能由C语言(或其他语言)实现,可以增加一些不容易由Lua实现的功能.这就是L ...
- javascript闭包—围观大神如何解释闭包
闭包的概念已经出来很长时间了,网上资源一大把,本着拿来主意的方法来看看. 这一篇文章 学习Javascript闭包(Closure) 是大神阮一峰的博文,作者循序渐进,讲的很透彻.下面一一剖析. 1. ...
- 17秋 软件工程 第六次作业 Beta冲刺 Scrum5
17秋 软件工程 第六次作业 Beta冲刺 Scrum5 各个成员冲刺期间完成的任务 世强:完成APP端相册.部员管理.手势签到模块: 陈翔:完成Scrum博客.总结博客,完成超级管理员前后端对接: ...