⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socketconn.java

📁 j2me的联网21点程序
💻 JAVA
字号:
package com.dfun.blackjackServer;
import java.net.*;
import java.io.*;
/**************************************************
 * @author Beetle
 * 类功能介绍:连接一连接一进行常规的数据收发,但是在客户端没有请
 * 求的情况下不能主动下发数据(因为客户端并不长时间监听连接一)
 * 连接二连接二用于消息通知(客户端长时间进行监听),该连接可以从
 * 服务端主动下发消息除初始化为一般不接受数据
 **************************************************/
public class SocketConn extends Thread{
	private Control ctrl;           //主控
	private int connState;          //连接状态(0还未初始化,1连接二,2连接二)
	private SocketManage connManage;  //连接管理器
	private DataOutputStream out;	//输入流
	private DataInputStream in;	    //输出流
	public boolean isListener;     //是否进行监听
	private String userId;         //用户id
	public SocketConn(Control ctrl,SocketManage connManage,Socket conn) {
		this.ctrl = ctrl;
		this.connManage=connManage;
		userId=null;
		connState = 0;
		try{
			out=new DataOutputStream(conn.getOutputStream());
			in=new DataInputStream(conn.getInputStream());
		}catch(Exception e){

			return;
		}
		isListener=true;
		this.start();
	}
	/*******************************************************
	 * 功能介绍:根据手机发上来的指令号将参数交给某个过程
	 * 输入参数:无
	 *******************************************************/
	public void run() {
		String inputStr="";
		try {
			while (isListener) {
				inputStr = in.readUTF();
				if (connState != 0) {  //该连接是否已初始化完毕完毕则把数据发给分发器
					if (connState == 1) {  //判断当属于哪个连接
						ctrl.getOneData(userId, inputStr);
					}else if (connState == 2) {
						ctrl.getTwoData(userId, inputStr);
					}
				}else {                //未初始化则进行初始化
					int order=Integer.parseInt(inputStr.substring(0,2));
					inputStr=inputStr.substring(2,inputStr.length());
					switch (order) {
						case 99:      //连接一初始化
							initConnOne();
							break;
						case 98:      //连接二初始化
							initConnTwo(inputStr);
							break;
						case 97:     //接收用户消息并生成用户对象
							getUserInfo(inputStr);
							break;
					}
				}
			}
		}
		catch (Exception e) {
			//如果还没有userid表明网络出错前程序还没初始化完毕则不进行清理操作
			if(userId!=null){
				//如果这是第一次断线则执行清理程序(如果为否表明另一个连接已执行了清理程序)
				if (isListener) {
					ctrl.userOffline(userId);
				}
			}

		}
	}

	/*****************************************************
	 * 功能介绍:初始化连接一
	 * 输入参数:无
	 * 输出参数:无
	 ****************************************************/
	private void initConnOne() throws IOException {
		userId = String.valueOf(Init.ramdon());
		connManage.addConnOne(userId, this);
		sendData("99" + userId);
	}

	private void initConnTwo(String userId) {
		this.userId = userId; //将连接二发上来的id作为当前的用户id
		connManage.addConnTwo(userId, this);
		connState = 2;
	}

	/*****************************************************
	 * 功能介绍:取得用户发上来的用户信息,并生成用户对象
	 * 输入参数:用户发上来的信息
	 * 输出参数:无
	 ****************************************************/
	private void getUserInfo(String inputStr){
		String arrTmp[]=inputStr.split(",");						//组成为电话号码,用户昵称
		String phoneNumber=arrTmp[0];
		String userName=arrTmp[1];
		String password =arrTmp[2];
		ctrl.userManage.addUser(userId,phoneNumber,userName,password);                  //生成用户
		connState = 1;
	}
	/*****************************************************
	 * 功能介绍:发送数据
	 * 输入参数:要发送的数据
	 * 输出参数:是否成功
	 ****************************************************/
	public boolean sendData(String outStr) {
		try {
			out.writeUTF(outStr);
			return true;
		}
		catch (Exception e) {
			System.out.println("服务端使用连接"+connState+"发送"+outStr+"发生错误  "+e.getMessage());
			//如果还没有userid表明网络出错前程序还没初始化完毕则不进行清理操作
			if(userId!=null){
				//如果这是第一次断线则执行清理程序(如果为否表明另一个连接已执行了清理程序)
				if (isListener) {
					ctrl.userOffline(userId);
				}
			}
			return false;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -