做了一个模拟QQ

package com.hope.fou;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.Scanner;

public class ClientThread extends Thread{
private Socket client=null;
private InputStream in=null;
private OutputStream out=null;
public ClientThread() {
client=new Socket();
try {
client.connect(new InetSocketAddress("192.168.1.121",8888));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
try {
in=client.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
while(!Thread.interrupted()){
byte[]buffer=new byte[1024];
int len=0;
try {
len=in.read(buffer);
System.out.println(new String(buffer,0,len));
} catch (IOException e) {
e.printStackTrace();
}
}

}
public void write() {
Scanner sc=new Scanner(System.in);
try {
out=client.getOutputStream();
} catch (IOException e1) {
e1.printStackTrace();
}
this.start();
while(!Thread.interrupted()){

String str=sc.nextLine();
try {
out.write(str.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}

}


}


服务器
package com.hope.fou;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;

public class ServerLink {
// 连接
private ServerSocket server = null;
private CopyOnWriteArrayList<Socket> copy = null;

public ServerLink() {
copy = new CopyOnWriteArrayList<Socket>();
}

public void link() {
try {
server = new ServerSocket();
server.bind(new InetSocketAddress("192.168.1.121", 8888));
while (!Thread.interrupted()) {
Socket client = server.accept();
copy.add(client);// 需要将请求连接的客户端
System.out.println(copy.size());
new ServerThread(copy, client).start();

}

// new ServerThread(copy, client).start();

} catch (IOException e) {
e.printStackTrace();
}
}
}



package com.hope.fou;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Iterator;
import java.util.concurrent.CopyOnWriteArrayList;

public class ServerThread extends Thread {
private CopyOnWriteArrayList<Socket> copy = null;
private Socket client = null;
private InputStream in = null;
private OutputStream out = null;

public ServerThread(CopyOnWriteArrayList<Socket> copy, Socket client) {
super();
this.copy = copy;
this.client = client;
try {
in = client.getInputStream();
out = client.getOutputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

@Override
public void run() {
// 负责将数据读出来并分发给所有的用户
while (!Thread.interrupted()) {
int len = 0;
byte[] buffer = new byte[1024];
try {
len = in.read(buffer);
System.out.println(copy.size());
System.out.println("__________");
//System.out.println(client.getInetAddress()+"   "+new String(buffer,0,len) );
Iterator<Socket> it = copy.iterator();
while (it.hasNext()) {
Socket targetClient = it.next();
if (!targetClient.equals(client)) {

targetClient.getOutputStream().write(buffer, 0, len);
}
}
} catch (IOException e) {
e.printStackTrace();
continue;
}

}
}
}




测试
public class ServerTest {
public static void main(String[] args) {
new ServerLink().link();
}
}

猜你喜欢

转载自yanzi5261314.iteye.com/blog/1506754