📄 3061ed796ad500191278a9c7f6eb5c4e
字号:
/*
* Created on 2005-5-31
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package server;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
import java.net.*;
import java.util.*;
import java.io.*;
class TCPThread extends Thread
{
private int port = 1234;
ServerGUI serverGUI = null;
ServerSocket serverSocket = null;
//临时变量,表示一个用户名
String aScreenName = null;
String messageGot = null;
//accept()返回的一个socket,表示server和client的一个TCP连接:
Socket aSocket = null;
//用于存放socket连接的Map:
HashMap sockets = null;
//用于反映查询是否从在的变量:
boolean exist = false;
//输入输出流
/*InputStream inputStreamFromClient = null;
OutputStream outputStreamToClient = null;*/
DataInputStream datumFromClient = null;
PrintStream dataToClient = null;
TCPThread(ServerGUI serverGUI, int tcpPort)
{
this.serverGUI = serverGUI;
this.port = tcpPort;
sockets = new HashMap();
try
{
serverGUI.appendDisplayArea("正在建立连接...\n");
serverSocket = new ServerSocket(port);
} catch(IOException e)
{
System.err.println("Meet some difficult in " +
"producing serversocket");
return ;
}
serverGUI.appendDisplayArea("已建立连接\n");
}
public void run()
{
while(true)
{
/*try
{
aSocket = serverSocket.accept();
datumFromClient = new DataInputStream(aSocket.getInputStream());
aScreenName = datumFromClient.readLine();
sockets.put(aScreenName, aSocket);
dataToClient = new PrintStream(aSocket.getOutputStream());
dataToClient.println("WELCOM <6001>");
} catch(IOException e)
{
System.err.println("difficult in serverSocket connection");
}*/
try
{
aSocket = serverSocket.accept();
// inputStreamFromClient = aSocket.getInputStream();
datumFromClient = new DataInputStream(aSocket.getInputStream());
} catch(IOException e)
{
serverGUI.appendDisplayArea(e.getMessage() + "\n");
}
try
{
// outputStreamToClient = aSocket.getOutputStream();
dataToClient = new PrintStream(aSocket.getOutputStream());
} catch(IOException e)
{
serverGUI.appendDisplayArea("输出流错误\n");
}
//格式是HELO screenName,故取第五个字符以后的:
//debug
try
{
messageGot = datumFromClient.readLine();
} catch(IOException e)
{
serverGUI.appendDisplayArea("读取一行时出现错误" + e.getMessage() + "\n");
}
System.err.println("print messageGot:" + messageGot);
if (messageGot.indexOf("HELO ") == -1)
continue;
aScreenName = messageGot.substring(messageGot.indexOf("HELO ") + 5);
serverGUI.appendDisplayArea("接到用户名" + aScreenName + "\n");
exist = sockets.containsKey(aScreenName);
//
System.out.println("!exist: " + !exist);
dataToClient.println(!exist);
if (exist)
{
try
{
serverGUI.appendDisplayArea("用户尝试用相同的登陆名,强制关闭连接\n");
datumFromClient.close();
dataToClient.close();
aSocket.close();
} catch(IOException e)
{
serverGUI.appendDisplayArea("关闭socket连接(aSocket.close();)时出错\n");
}
} else
{
sockets.put(aScreenName, aSocket);
dataToClient.println("WELCOME " + serverGUI.udpPort);
serverGUI.appendDisplayArea("用户 " + aScreenName + " 登陆\n");
broadCast("用户 " + aScreenName + " 登陆\n");
}
}
}
public void broadCast(String message)
{
//..
}
public void closeSocket()
{
Iterator iter = null;
if (sockets != null)
iter = sockets.values().iterator();
try
{
//关闭ServerSocket
if (serverSocket != null)
serverSocket.close();
serverGUI.appendDisplayArea("已关闭serverSocket\n");
//关闭所有与client的socket:
if (iter != null)
while(iter.hasNext())
((Socket)iter.next()).close();
} catch(IOException e)
{
serverGUI.appendDisplayArea("未能成功关闭所有的tcp连接");
return ;
}
serverGUI.appendDisplayArea("已关闭所有连接\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -