自己写的个java聊天
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.List;
public class ChatServer {
public static int id;
private ServerSocket server;
private List<Connection> connections;
InetAddress localAddress;
public static void main(String[] args){
new ChatServer().startServer();
}
private void startServer(){
boolean started = false;
try {
connections = new ArrayList<Connection>();
server = new ServerSocket(8888);
localAddress = InetAddress.getLocalHost();
started = true;
System.out.println("服务器已启动..正在监听.../服务器ip: " + localAddress);
} catch (IOException e) {
System.out.println("服务器启动失败!请关闭服务器,重新启动");
System.exit(0);
}
while(started){
try {
Socket connection = server.accept();
System.out.println("来自" + connection.getInetAddress() + "已建立:" );
Connection c = new Connection(connection);
connections.add(c);
new Thread(c).start();
} catch (IOException e) {
System.out.println("客户端连接出错");
}
}
}
class Connection implements Runnable{
private Socket connection;
private ObjectInputStream inputS;
private ObjectOutputStream outputS;
private boolean beConnected = false;
private int id;
public Connection(Socket connection){
this.connection = connection;
this.id = ChatServer.id++;
try {
inputS = new ObjectInputStream(connection.getInputStream());
outputS = new ObjectOutputStream(connection.getOutputStream());
beConnected = true;
} catch (IOException e) {
System.out.println("无法获取连接的输入输出流");
}
}
public void run(){
try {
outputS.writeObject("已连接到服务器:"+connection.getInetAddress());
outputS.writeObject("服务器:您的客户id为 :" + id + "\t" + " 输入BYE退出聊天");
while(true){
String inLine = (String) inputS.readObject();
//System.out.println(inLine);
ObjectOutputStream output;
if(inLine.charAt(0)==':'&&inLine.length()>0){
int i =0;
int index = Integer.parseInt(inLine.substring(1,2));
for(i = 0;i<connections.size();i++){
Connection c = connections.get(i);
if(c.id==index){
break;
}
}
String inout = inLine.substring(2);
Connection c = connections.get(i);
output = c.outputS;
output.writeObject("Client " + id + ": " + inout);
output.flush();
}else{
for(int i = 0;i<connections.size();i++){
Connection c = connections.get(i);
output = c.outputS;
output.writeObject("Client " + id + ": " + inLine);
output.flush();
if(inLine.toUpperCase().equals("BYE")){
outputS.writeObject("服务器:你已和服务器断开连接");
this.inputS.close();
this.outputS.close();
this.connection.close();
connections.remove(this);
}
}
}
}
} catch (IOException e) {
System.out.println("客户已退出连接");
connections.remove(this);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
finally{
try {
inputS.close();
connection.close();
} catch (IOException e) {
System.out.println("关闭连接错误");
}
}
}
}
}
评论0
最新资源