?? user.java
字號:
package org.phyeas.server;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* 每一個連接表示一個用戶
*
* @author _phyeas
*
*/
public class User implements Runnable {
private Socket socket;
private Server server;
private int bufferSize;
private int id;
private String name;
private Group currentGroup;
/**
* 現在所在的group
*
* @return
*/
public Group getCurrentGroup() {
return currentGroup;
}
public void setCurrentGroup(Group currentGroup) {
this.currentGroup = currentGroup;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private InputStream in;
private OutputStream out;
private boolean stop;
public boolean isStop() {
return stop;
}
public void setStop(boolean stop) {
this.stop = stop;
}
// ************** server ********
public Server getServer() {
return server;
}
public void setServer(Server server) {
this.server = server;
}
// ************** server ********
/**
* 無參數 構造USER
*/
public User() {
}
/**
* 構造一個已連接的USER
*
* @param socket
*/
public User(Socket socket) {
setSocket(socket);
}
/**
* 構造一個已連接的USER
*
* @param socket
* 套接字
* @param server
* 服務器
*/
public User(Socket socket, Server server) {
this(socket);
setServer(server);
}
/**
* 構造一個已連接的USER
*
* @param socket
* 套接字
* @param server
* 服務器
* @param bufferSize
* 緩沖大小。默認是1024
*/
public User(Socket socket, Server server, int bufferSize) {
this(socket, server);
this.bufferSize = bufferSize;
}
/**
* 獲取連接套接字
*
* @return 套接字
*/
public Socket getSocket() {
return socket;
}
/**
* 設置套接字
*
* @param socket
*/
public void setSocket(Socket socket) {
this.socket = socket;
}
/**
* 開始接收客戶數據
*/
public void start() {
Thread thread = new Thread(this);
thread.start();
}
/**
* 停止接收
*/
public void stop() {
setStop(true);
}
/**
* 向客戶端發送數據
*
* @param data
* 數據
* @param off
* 偏移量
* @param len
* 長度
*/
public void send(byte[] data, int off, int len) {
if (socket != null) {
try {
if (out == null) {
out = socket.getOutputStream();
}
out.write(data, off, len);
} catch (Exception ex) {
// ex.printStackTrace();
}
} else {
System.out.println("socket為空...");
}
}
/**
* 向客戶端發送數據
*
* @param data
* 數據
*/
public void send(byte[] data) {
send(data, 0, data.length);
}
public void run() {
try {
if (socket != null) {
in = socket.getInputStream();
if (bufferSize <= 0)
bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
while (!isStop()) {
int size = in.read(buffer);
ByteArrayOutputStream bo = new ByteArrayOutputStream();
bo.write(buffer, 0, size);
byte[] data = bo.toByteArray();
if (data.length > 2
&& (data[0] == Byte.MIN_VALUE && data[1] == Byte.MAX_VALUE)) {
for (int i = 0; i < data.length; i++) {
if (data[i] == Byte.MIN_VALUE
&& data[i + 1] == Byte.MAX_VALUE) {
int j = i;
List<Byte> lstData = new ArrayList<Byte>();
for (; i < data.length; i++) {
if (data[i] == Byte.MIN_VALUE
&& data[i + 1] == Byte.MAX_VALUE
&& i != j) {
i--;
break;
}
lstData.add(data[i]);
}
byte[] b = new byte[lstData.size()];
for (int k = 0; k < b.length; k++) {
b[k] = lstData.get(k);
}
server.revice(b, this);
}
}
} else {
server.revice(data, this);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -