本例开发实现了一个多用户的P2P在线聊天程序,C/S结构,客户端可发送消息,然后其他的用户接收到该消息并将其显示在界面中,服务器对信息进行有关处理并向适当的用户发送,同时在服务器端还将显示所有的在线用户,网络管理员即服务器端管理员可选中某用户并将其踢出该聊天室。
本篇为第二篇,如果您是第一次进来请从第一篇开始,此程序不用修改完全可用,第一篇地址:http://java161.iteye.com/blog/616113
客户端用户监听线程用来监听从服务器发送过来的信息,并进行相应的处理。客户端监听具有Socket的输入流对象:
protected DataInputStream inStream;
inStream=new DataInputStream(connSock.getInputStream());
同时服务器用户监听相似,该线程需要实例化一个与服务器Socket连接的输入流,然后从该输入流中读取信息,并加以分析:
String str=inStream.readUTF();
if(str.equals("quit"))
{
applet.textArea1.append("\n 对不起,你被管理员踢出来了,请重新登陆!\n");
applet.login=false;
applet.label1.setText("用户名:");
applet.button1.setLabel("登陆");
}
else
{
StringTokenizer st=new StringTokenizer(str,":%");
applet.textArea1.append(st.nextToken()+" 说:"+st.nextToken()+"\n");
}
从上面的程序可看出,当接收到的信息为“quit”表示服务器端网络管理员已经将你踢出;若为其他信息则将所得到的信息显示在主页面中。
程序清单:
package Client;
import java.awt.*;
import java.io.*;
import java.lang.*;
import java.net.*;
import java.util.*;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2010</p>
*
* <p>Company: </p>
*
* @author www.jianfei5u.com
* @version 1.0
*/
public class UserThread extends Thread
{
protected Socket connectionSocket;
protected DataInputStream inStream;
Applet1 applet=null;
public UserThread(Applet1 applet,Socket connSock) throws IOException
{
connectionSocket=connSock;
this.applet=applet;
inStream=new DataInputStream(connSock.getInputStream());
}
protected void closeConnection()
{
try
{
connectionSocket.close();
}
catch(Exception oops)
{}
stop();
}
public void run()
{
while(true)
{
try
{
String str=inStream.readUTF();
if(str.equals("quit"))
{
applet.textArea1.append("\n 对不起,你被管理员踢出来了,请重新登陆!\n");
applet.login=false;
applet.label1.setText("用户名:");
applet.button1.setLabel("登陆");
}
else
{
StringTokenizer st=new StringTokenizer(str,":%");
applet.textArea1.append(st.nextToken()+" 说:"+st.nextToken()+"\n");
}
}
catch(Exception oops)
{}
}//end of while
}//end of Run()
}//end of class
未完待续。。。下篇 通信流程(实例P2P原理分析图)和运行结果
地址:http://java161.iteye.com/blog/616677