📄 clientthread.java
字号:
package XXRoom;
import java.net.*;
import java.io.*;
import java.util.StringTokenizer;
import java.util.NoSuchElementException;
import javax.swing.JOptionPane;
/*向用户发送消息*/
class ClientThread extends Thread
{
ServerThread sThread;
//用来向联机者发送信息的TCP
Socket skt;
//发送消息的流
PrintStream write;
BufferedReader read;
boolean ready;
String nickName;
public ClientThread( ServerThread sThread, Socket skt ) throws IOException
{
this.sThread = sThread;
write = new PrintStream( skt.getOutputStream() );
read = new BufferedReader( new InputStreamReader( skt.getInputStream() ) );
this.skt = skt;
ready = false;
}
public void run()
{
while( true ) {
try
{
String s = read.readLine();
if( s == null )
return;
// JOptionPane.showMessageDialog( sThread.sFrm, s );
StringTokenizer st = new StringTokenizer( s );
try
{
String s1 = st.nextToken();
if( ! s1.equals( "HELO:" ) ) {
// JOptionPane.showMessageDialog( sThread.sFrm, "客户名字格式错误" );
write.println( "NickNameRepeated" );
continue;
}
String s2 = st.nextToken();
//s2即用户想要使用的 Nickname
LinkTableModel ltm = (LinkTableModel)sThread.sFrm.table.getModel();
//如果没有重名的用户,通知用户可以使用并发送UDP端口号
synchronized( sThread.sFrm.table ) {
if( ltm.isGuestExsit( s2 ) ) {
// JOptionPane.showMessageDialog( sThread.sFrm, "客户名字重复: " + s2 );
write.println( "NickNameRepeated" );
continue;
}
else {
// JOptionPane.showMessageDialog( sThread.sFrm, "客户名字可用: " + s2 );
nickName = s2;
write.println( "WELCOME " + sThread.dSocket.getLocalPort() );
ready = true;
//把用户列表发送给新加入的用户
for( int i = 0; i < ltm.getRowCount(); i ++ ) {
write.println ( "LIST " + ltm.getValueAt( i, 1 ) );
}
synchronized( sThread.messages ) {
sThread.messages.add( "LIST " + nickName );
}
ltm.addGuest( skt.getInetAddress().getHostAddress(), s2 );
sThread.sFrm.table.updateUI();
break;
}
}
}
catch ( NoSuchElementException er )
{
er.printStackTrace();
continue;
}
}
catch ( IOException e )
{
JOptionPane.showMessageDialog( sThread.sFrm, nickName + "发生IO异常" );
synchronized( sThread.sFrm.table ) {
LinkTableModel ltm = (LinkTableModel)sThread.sFrm.table.getModel();
ltm.removeGuestFromNickName( nickName );
sThread.sFrm.table.updateUI();
}
sThread.sFrm.appendSystemMsg( nickName + "已经离开聊天室\n" );
JOptionPane.showMessageDialog( sThread.sFrm, nickName + "quit" );
synchronized( sThread.messages ) {
sThread.messages.add( "QUIT " + nickName );
}
JOptionPane.showMessageDialog( sThread.sFrm, nickName + "删除" );
return;
}
}
}
public void dispose()
{
try
{
read.close();
skt.close();
}
catch ( IOException e )
{
e.printStackTrace();
}
write.close();
skt = null;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -