转载的,java与AS3实现的聊天室
2014-06-10 18:41
260 查看
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程序实现Logo画面的编程
- AOP java api的实现 和 第三方实现.(转载)
- 用java多线程实现一个控制台聊天室
- 浅谈java单元格合并的实现(转载)
- java中如何实现多进程并发?注意不是多线程 - ITeye问答(转载)
- java语音聊天室原形的实现
- 实现 Java 多线程并发控制框架--转载
- 用java多线程实现一个控制台聊天室
- [转载]经典java转码程序,实现native2ascii命令行的功能
- ID3算法的java实现(转载,修改)
- java中实现定时器 (转载)
- JAVA实现精确的加减乘除(转载)
- 用Java动态代理实现AOP(转载)
- 用java多线程实现一个控制台聊天室
- 如何实现java,jsp,ajax编写的在线聊天室啊?
- JAVA上加密算法的实现用例(转载)
- JAVA实现中文排序(转载)
- [转载]javaMail Java实现邮件发送
- 实现 Java 多线程并发控制框架--转载
- 利用Java的反射与代理实现AOP(转载)