转载的,java与AS3实现的聊天室
来源:互联网 发布:内存卡恢复数据软件 编辑:程序博客网 时间:2024/05/19 05:32
java:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class FlashScoket {
private List<Client> clientList = new ArrayList<Client>();
public static void main(String[] args) {
new FlashScoket().runSocket();
}
private void runSocket() {
try {
ServerSocket socketServer = new ServerSocket(8888);
System.out.println("服务器已启动,等待客户端连接");
while (true) {
// accept() 方法是阻塞式的,当有客户端连接成功后才继续执行
Socket socket = socketServer.accept();
System.out.println("客户端连接成功");
// 实例化一个 Client 对象,并启动该线程
Client client = new Client(socket);
clientList.add(client);
client.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
class Client extends Thread {
private Socket socket;
private BufferedReader reader;
private DataOutputStream writer;
private Client(Socket socket) {
this.socket = socket;
try {
// 获得输入流和输出流,输入流为 BufferedReader 类型,输出流为 DataOutputStream 类型
reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
writer = new DataOutputStream(socket.getOutputStream());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
try {
while (true) {
// readLine() 方法也是阻塞式的,当客户端有消息发来就读取,否则就一直等待
String msg = reader.readLine();
// 当客户端发送的字符串为 null 时,说明客户端已经关闭,此时退出循环
if (msg == null) {
clientList.remove(this);
System.out.println("客户端已离开");
break;
}
// 将读入的内容写给每个客户端
for (Iterator<Client> it = clientList.iterator(); it.hasNext();) {
Client client = it.next();
client.getWriter().writeUTF(msg);
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭 socket 及相关资源
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (socket != null) {
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
public DataOutputStream getWriter() {
return writer;
}
}
}
AS3:
var userName:String = "FL 车在臣";
var out_txt:String = new String();
// ************ 组件参数初始化 ************
submit_btn.label = "发送消息";
output_txt.editable = false;
// 设置各组件中字体的大小
input_txt.setStyle("textFormat", new TextFormat(null, 15));
output_txt.setStyle("textFormat", new TextFormat(null, 15));
submit_btn.setStyle("textFormat", new TextFormat(null, 15, null, true));
// 当按下回车或点击 submit_btn 按钮后调用事件处理函数
submit_btn.addEventListener(MouseEvent.CLICK, sendMessage);
addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
// 事件处理函数
function onKeyDown(evt:KeyboardEvent):void {
if (evt.keyCode == Keyboard.ENTER) {
sendMessage(null);
}
}
function sendMessage(evt:Event):void {
if (input_txt.text == "") {
return;
}
var bytes:ByteArray = new ByteArray();
bytes.writeUTFBytes("<font color='#0000FF'>" + userName + " : </font>" + input_txt.text + "\n");
socket.writeBytes(bytes);
socket.flush();
// 清空 input_txt,并设置焦点到 input_txt
input_txt.text = "";
stage.focus = input_txt;
}
// ************ 客户端 Socket ************
var socket:Socket = new Socket();
socket.connect("127.0.0.1", 8888);
// 当客户端 socket 收到数据后调用 readMessage() 函数
socket.addEventListener(ProgressEvent.SOCKET_DATA, readMessage);
socket.addEventListener(IOErrorEvent.IO_ERROR, socketIOError);
function readMessage(evt:ProgressEvent):void {
out_txt += socket.readUTF() + "\n";
output_txt.htmlText = out_txt;
output_txt.verticalScrollBar.scrollPosition = output_txt.verticalScrollBar.maxScrollPosition;
}
function socketIOError(evt:IOErrorEvent):void {
out_txt += "服务器端尚未开启,请稍后再试\n";
output_txt.htmlText = out_txt;
}
- 转载的,java与AS3实现的聊天室
- JAVA网络聊天室的设计与实现
- Java实现的聊天室
- 聊天室系统的Java实现
- Java 实现多线程的聊天室
- 关于蓝牙聊天室的设计与实现
- Android Socket通信与聊天室的实现
- java语音聊天室原形的实现
- java语音聊天室原形的实现
- JAVA推技术聊天室的实现
- java 实现单线程的聊天室
- java简单Socket聊天室程序的实现
- Java实现简单的聊天室程序
- Java 聊天室的简单实现原理
- 简单聊天室的实现
- WebSocket聊天室的实现
- 简单的java聊天室
- JAVA 的聊天室程序
- Sql得到(去除)字符串中所有汉字,字母,数字的函数
- ubuntu make报错:“/usr/bin/ld catnot find crt1”,“/usr/bin/ld catnot find lXXX”
- 用老项目来缅怀下逝去的青春
- redis php 实例
- 一维数组长度
- 转载的,java与AS3实现的聊天室
- “ error: file not found.” followed by “grub rescue> _ ” 解决
- 通过Hadoop Shell命令进行导入导出操作
- 刀塔传奇战斗系统分析
- c/c++关于随机数字问题
- PHP开发环境部署说明
- 关于TencentQQ互联
- 每日一个知识点7 2014/6/10
- Mac下MySQL卸载方法