java 从零开始,学习笔记之基础入门<网络编程_带QQ模拟功能>(二十)(三)

2014-11-24 08:29:18 · 作者: · 浏览: 7
putStream("e:\\xw.wav");
byte[] b=new byte[1024];
int len=0;
while((len=is.read(b))!=-1){
os.write(b, 0, len);
os.flush();
}
is.close();
os.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
QQ聊天程序模拟(完成客户端到服务端一对多的聊天模式)
package com.ibm.qq;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashSet;
import java.util.Set;
public class QQserver {
static Setusers =new HashSet();
public static void main(String[] args) {
Socket socket = null;
try {
ServerSocket server =new ServerSocket(9009);
while(true){
System.out.println(users.size());
//一个客户端链接进来,就创建一个socket,
socket = server.accept();
//一个客户端连接进来,将socket放入到set集合中去
users.add(socket);
//启动线程类 传递进入到服务端的集合对象,同时把当前进入的Socket传递过去
QQSession qs = new QQSession(users,socket);
Thread tt = new Thread(qs);
tt.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.ibm.qq;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Iterator;
import java.util.Set;
public class QQSession implements Runnable{
private Setusers;//所有连接到服务端的客户端
private Socketclient;//当前说话的那个客户端
public QQSession(Set users,Socket client){
this.users = users;
this.client = client;
}
@Override
public void run() {
//读取数据 和输出数据
BufferedReader br = null;
PrintWriter pw = null;
try {
while(true){
// pw = new PrintWriter(client.getOutputStream());
br= new BufferedReader(new InputStreamReader(client.getInputStream()));
//判断读进来的数据不为空,如果不为空,则将读进来的数据发送到客户端
String str = null;
if((str=br.readLine())!=null){
//群发给所有的客户端
Iterator it =users.iterator();
while(it.hasNext()){
Socket sk = it.next();
//将读进来的值输出到客户端
//启动客户端的线程类,将读进来的数据发送到多个客户端
QQClient qc =new QQClient(sk,client.getInetAddress().getHostAddress()+":"+str);
Thread tt =new Thread(qc);
tt.start();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.ibm.qq;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
public class QQClient implements Runnable{
Socket client;
String msg;
PrintWriter pw = null;
public QQClient(Socket client,String msg) {
this.client=client;
this.msg= msg;
}
@Override
public void run() {