您的位置:首页 > 编程语言 > Java开发

Java Socket编程(模拟多用户聊天室)

2014-02-26 09:26 253 查看
Server.java

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class Server {
private ServerSocket ss;
private Socket socket;
private List<Socket> list = new ArrayList<Socket>();
public Server() {
try {
ss = new ServerSocket(10000);
while (true) {
socket = ss.accept();
list.add(socket);
System.out.println("在线人数:" + list.size());
new Thread(new ChatThread(socket, list)).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
new Server();
}

class ChatThread implements Runnable{
private Socket socket;
private List<Socket> socketList;
private BufferedReader bufferedReader;

public ChatThread(Socket socket, List<Socket> socketList) {
super();
this.socket = socket;
this.socketList = socketList;
}
private void preRun(){
InputStreamReader r=null;
try {
r = new InputStreamReader(this.socket.getInputStream());
this.bufferedReader=new BufferedReader(r);
} catch (IOException e) {
e.printStackTrace();
}
}
private PrintWriter getSocketPrintWriter(Socket socket){
OutputStream os=null;
try {
os = socket.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
OutputStreamWriter osw=new OutputStreamWriter(os);
BufferedWriter bw=new BufferedWriter(osw);
return new PrintWriter(bw, true);
}
private void broadcast(String msg){
for(Socket s : socketList){
PrintWriter pw=this.getSocketPrintWriter(s);
pw.println(msg);
}
}
@Override
public void run() {
String msg="";
this.preRun();
while(true){
try {
msg="from client: "+this.bufferedReader.readLine();
System.out.println(msg);
this.broadcast(msg);
} catch (IOException e) {
try {
this.bufferedReader.close();
this.socket.close();
this.socketList.remove(this.socket);
this.broadcast("somebody exist....people size :" +socketList.size());
} catch (IOException e1) {
e1.printStackTrace();
}
e.printStackTrace();
return ;
}
}
}

}
}Client.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
Socket socket;
BufferedReader in;
PrintWriter out;

public Client() {

try {
socket = new Socket("127.0.0.1", 10000);
} catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}

new Thread(){
public void run(){
try {
BufferedReader line = new BufferedReader(new InputStreamReader(System.in));
out = new PrintWriter(socket.getOutputStream(), true);
String str = null;
while((str= line.readLine()) != null){
out.println(str);
}
line.close();
} catch (IOException e) {
e.printStackTrace();
}finally{
out.close();
}
}
}.start();

new Thread(){
public void run(){
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str = null;
while((str = in.readLine()) != null){
System.out.println("receive from server:" + str);
}
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}

public static void main(String[] args) {
new Client();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java Socket