java代码server

package Client;

import java.io.Serializable;

import Server.ObjectTypeInterface;

public class ClientDataUserLogin  implements Serializable,ObjectTypeInterface{
	private static final long serialVersionUID = 1L;
	public String userId = null;
	public String password = null;
	public String className = null;
	public ClientDataUserLogin() {
		this.className = "ClientDataUserLogin";
		this.userId = "ClientDataUserLogin";//测试专用
	}
	public String getUserId() {
		return this.userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String ObjectType() {
		// TODO Auto-generated method stub
		return this.className;
	}
	@Override
	public String GetSenderUserId() {
		// TODO Auto-generated method stub
		return this.userId;
	}
}
package Server;

import java.io.Serializable;

public class ClientDataUserLoginState implements Serializable,ObjectTypeInterface{
	private static final long serialVersionUID = 2L;
	public String clientDataUserLoginState = null;
	public String UserId = null;
	public ClientDataUserLoginState(String clientDataUserLoginState) {
		// TODO Auto-generated constructor stub
		this.clientDataUserLoginState = clientDataUserLoginState;
	}
	@Override
	public String ObjectType() {
		// TODO Auto-generated method stub
		return this.clientDataUserLoginState;
	}
	@Override
	public String GetSenderUserId() {
		// TODO Auto-generated method stub
		return this.UserId;
	}
	public String getUserId() {
		return UserId;
	}
	public void setUserId(String userId) {
		UserId = userId;
	}
}

package Server;

public interface ObjectTypeInterface{
	public String ObjectType();
	public String GetSenderUserId();
}

package ServerMain;

import java.net.Socket;
import java.util.Vector;

public class OnlineUserIdQueue {
	public static Vector<OnlineUserIdSocket> onlineUserIdQueue = new Vector<OnlineUserIdSocket>();
	
	public static Socket GetOnlineUserSocket( String string ){
		synchronized (onlineUserIdQueue) {
			int queueSize = onlineUserIdQueue.size();
			for(int i=0;i<queueSize;i++){
				if(onlineUserIdQueue.get(i).GetUserId().equalsIgnoreCase(string)){
					return onlineUserIdQueue.get(i).GetSocket();
				}
			}
		}
		return null;
	}
	public static void AddOnlineUser( OnlineUserIdSocket onlineUserIdSocket ){
		onlineUserIdQueue.add(onlineUserIdSocket);
	}
	public static void DeleteOnlineUserId( String string ){
		//onlineUserIdQueue.remove(0);
		synchronized (onlineUserIdQueue) {
			int queueSize = onlineUserIdQueue.size();
			for(int i=0;i<queueSize;i++){
				if(onlineUserIdQueue.get(i).GetUserId().equalsIgnoreCase(string)){
					onlineUserIdQueue.remove(i);
				}
			}
		}
	}
	public static void DeleteOnlineUserSocket( Socket socket ){
		//onlineUserIdQueue.remove(0);
		synchronized (onlineUserIdQueue) {
			int queueSize = onlineUserIdQueue.size();
			for(int i=0;i<queueSize;i++){
				if(onlineUserIdQueue.get(i).GetSocket().getInetAddress().equals(socket.getInetAddress())){
					onlineUserIdQueue.remove(i);
				}
			}
		}
	}
}

package ServerMain;

import java.net.Socket;

import Server.ObjectTypeInterface;

public class OnlineUserIdSocket implements ObjectTypeInterface{
	public Socket socket = null;
	public String UserId = null;
	public Socket GetSocket() {
		return socket;
	}
	public void SetSocket(Socket socket) {
		this.socket = socket;
	}
	public String GetUserId() {
		return UserId;
	}
	public void SetUserId(String userId) {
		UserId = userId;
	}
	@Override
	public String ObjectType() {
		// TODO Auto-generated method stub
		return "OnlineUserIdSocket";
	}
	@Override
	public String GetSenderUserId() {
		// TODO Auto-generated method stub
		return this.UserId;
	}	
}

package ServerMain;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class ReceiveMassage extends Thread{
	Socket socket = null;
	ServerSocket serverSocket = null;
	int port = 8080;
	public void run(){
		try {
			serverSocket = new ServerSocket(port);
			while(true){
				socket = serverSocket.accept();
				ReceiveMassageQueue.AddSocket(socket);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

package ServerMain;

import java.net.Socket;
import java.util.Vector;

public class ReceiveMassageQueue {
	public static Vector<Socket> receiveMassageQueue = new Vector<Socket>();
	public static Object receiveMassageQueueLock = new Object();
	public static void SetReceiveMassageQueueLock(Object object){
		receiveMassageQueueLock = object;
	}
	public static void IsEmpty() throws InterruptedException{
		synchronized (receiveMassageQueueLock) {
			if(receiveMassageQueue.isEmpty()){
				receiveMassageQueueLock.wait();
			}
		}
	} 
	public static void AddSocket(Socket socket){
		synchronized (receiveMassageQueueLock) {
			receiveMassageQueue.add(socket);
			receiveMassageQueueLock.notify();
		}
	}
	public static Socket GetObject(){
		synchronized (receiveMassageQueueLock) {
			Socket socket = receiveMassageQueue.firstElement();
			receiveMassageQueue.remove(0);
			return socket;
		}
	}
}

package ServerMain;

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;

import Server.ObjectTypeInterface;

public class SendMassage extends Thread{
	ObjectTypeInterface objectTypeInterface = null;
	Socket socket = null;
	ObjectOutputStream objectOutputStream = null;
	Object sendMassageLock = null;
	String sendUserId = null;
	public SendMassage() {
		// TODO Auto-generated constructor stub
		sendMassageLock = new Object();
		SendMassageQueue.SetSendMassageQueueLock(this);
	}
	public void run(){
		while(true){
			synchronized (sendMassageLock) {
				try {
					SendMassageQueue.IsEmpty();
					//**在SendMassageQueue.GetObject()中,获取和删除是一块执行的
					objectTypeInterface = SendMassageQueue.GetObject();
					sendUserId = objectTypeInterface.GetSenderUserId();
					socket = OnlineUserIdQueue.GetOnlineUserSocket(sendUserId);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			try {
				objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
				objectOutputStream.writeObject(objectTypeInterface);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

package ServerMain;

import java.util.Vector;

import Server.ObjectTypeInterface;

public class SendMassageQueue {
	public static Vector<ObjectTypeInterface> sendMassageQueue = new Vector<ObjectTypeInterface>();
	public static Object sendMassageQueueLock = null;
	public static void SetSendMassageQueueLock(SendMassage sendMassage){
		SendMassageQueue.sendMassageQueueLock = sendMassage;
	}
	public static void IsEmpty() throws InterruptedException{
		synchronized (sendMassageQueueLock) {
			if(sendMassageQueue.isEmpty()){
				sendMassageQueueLock.wait();
			}
		}
	}
	public static void AddObject(ObjectTypeInterface objectTypeInterface){ // 接口
		synchronized (sendMassageQueueLock) {
			sendMassageQueue.add(objectTypeInterface);
			sendMassageQueueLock.notify();
		}
	}
	public static ObjectTypeInterface GetObject(){
		synchronized (sendMassageQueueLock) {
			ObjectTypeInterface objectTypeInterface = sendMassageQueue.firstElement();
			sendMassageQueue.remove(0);
			return objectTypeInterface;
		}
	}
}

package ServerMain;

public class ServerMain {
	public static void main(String[] args) throws InterruptedException {
		new WorkPoolThread().start();
		new SendMassageQueue();
		new SendMassage().start();
		new ReceiveMassage().start();
		while(true){
			Thread.sleep(2000);
			System.out.println("receiveMassageQueue  "+ReceiveMassageQueue.receiveMassageQueue.size());
			//System.out.println("sendMassageQueue  "+SendMassageQueue.sendMassageQueue.size());
		}
	}
}

package ServerMain;
/*
 * 工作线程池:从ReceiveMassageQueue中提取数据,投放入线程中计算或者访问数据库
 * 
 * */
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import ServerSql.DBConnection;

public class WorkPoolThread extends Thread{
	public Object WorkPoolThreadLock = null;
	public Socket socket = null;
	public DBConnection dc = null;
	public WorkPoolThread() {
		// TODO Auto-generated constructor stub
		new ReceiveMassageQueue();
		ReceiveMassageQueue.SetReceiveMassageQueueLock(this);
		WorkPoolThreadLock = new Object();
		dc = new DBConnection("jdbc:mysql://127.0.0.1:3306/student", "root", "123456") ;
	}
	public void run(){
		//限定线程池中有20个线程(最大)
		ExecutorService fixedThreadPool = Executors.newFixedThreadPool(20);
		while(true){
			synchronized (WorkPoolThreadLock) {
				try {
					ReceiveMassageQueue.IsEmpty();
					//获取和删除是一起的
					socket = ReceiveMassageQueue.GetObject();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			fixedThreadPool.execute(new WorkThread(socket,dc));
		}
	}	
}

package ServerMain;

import java.io.BufferedInputStream;
import java.io.ObjectInputStream;
import java.net.Socket;

import Client.ClientDataUserLogin;
import Server.ObjectTypeInterface;
import ServerSql.DBConnection;
import ServerWork.UserLogin;

public class WorkThread extends Thread{
	public Socket socket = null;
	public ObjectInputStream  objectInputStream  = null;
	public DBConnection dc = null;
	public String ClassName = null;
	public ObjectTypeInterface objectTypeInterface = null;
	
	public WorkThread(Socket socket, DBConnection dc) {
		// TODO Auto-generated constructor stub
		this.socket = socket;
		this.dc = dc;
	}
	public void run(){
		try {
			objectInputStream = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
			objectTypeInterface =  (ObjectTypeInterface)(objectInputStream.readObject());
			ClassName = objectTypeInterface.ObjectType();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			// e.printStackTrace();
			// 用户异常的操作,强制退出的登入功能
			OnlineUserIdQueue.DeleteOnlineUserSocket(socket);
		}
		// 功能实现
		if(ClassName == null){
			
		}
		else if(ClassName.equalsIgnoreCase("ClientDataUserLogin")){
			new UserLogin((ClientDataUserLogin)objectTypeInterface,socket);
		}
	}
}

package ServerSql;

import java.sql.*;
public class DBConnection { 
  
	private String sql ;
	private ResultSet result ;
	private PreparedStatement preStatement;
	private Connection conn ;
	
	public void connect(String sWhere,String sAccount,String sPWD)
	{
		try
		{
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			conn = DriverManager.getConnection(sWhere,sAccount,sPWD);
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
  
	public void setPreStatement() throws SQLException
	{
		this.preStatement = conn.prepareStatement(sql); 
	}

	public DBConnection(String sWhere,String sAccount,String sPWD) 
	{  
		connect(sWhere,sAccount,sPWD);
	}
    
	public DBConnection()
	{
   
	}
    
	public void setSql(String sql) 
	{
		this.sql = sql ;
	}
    
	public String getSql() {
		return sql ;
	}
    
	public void selectSql() {
		try {
			//查询语句
			result = preStatement.executeQuery(sql) ;
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
    
	public void executeSql() {
		try {
			//改删增语句
			preStatement.executeUpdate() ;
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}  
	public ResultSet getResult() {
		return result ;
	}
}

package ServerSql;

import java.sql.*;

public class Sql {
	public static void SqlMain(DBConnection dc) throws SQLException{
		String command = null;
		dc.setSql(command );
		dc.setPreStatement() ;
		dc.executeSql();
		dc.selectSql() ;
	}
}

package ServerWork;

import java.net.Socket;

import Server.ClientDataUserLoginState;
import Server.ObjectTypeInterface;
import ServerMain.OnlineUserIdQueue;
import ServerMain.OnlineUserIdSocket;
import ServerMain.SendMassageQueue;
import Client.ClientDataUserLogin;

//登入功能
public class UserLogin {
	// 构造函数中的socket是当前功能的来源
	public UserLogin(ClientDataUserLogin clientDataUserLogin,Socket socket) {
		// TODO Auto-generated constructor stub
		// 编写功能.....
		// 增加在线
		OnlineUserIdSocket onlineUserIdSocket = new OnlineUserIdSocket();
		onlineUserIdSocket.SetSocket(socket);
		onlineUserIdSocket.SetUserId(clientDataUserLogin.getUserId());
		OnlineUserIdQueue.AddOnlineUser(onlineUserIdSocket);		
		// 返回给客户端的信息
		ClientDataUserLoginState clientDataUserLoginState = new ClientDataUserLoginState("OK");
		clientDataUserLoginState.setUserId(clientDataUserLogin.getUserId());
		
		// 发送的消息放入消息队列
		SendMassageQueue.AddObject((ObjectTypeInterface)clientDataUserLoginState);
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值