本例开发实现了一个多用户的P2P在线聊天程序,C/S结构,客户端可发送消息,然后其他的用户接收到该消息并将其显示在界面中,服务器对信息进行有关处理并向适当的用户发送,同时在服务器端还将显示所有的在线用户,网络管理员即服务器端管理员可选中某用户并将其踢出该聊天室。
本篇为第二篇,如果您是第一次进来请从第一篇开始,此程序不用修改完全可用,第一篇地址:http://java161.iteye.com/blog/616113
2 编写用户实例类(ServerConn.java)
在该用户实例类中,首先建立一个线程来监听该用户所发送的信息,并对该信息进行处理,同时实例化一个输出流用来向该客户发送指定信息:
protected UserThread reader;
protected DataOutputStream outStream;
outStream=new DataOutputStream(clientSock.getOutputStream());
reader=new UserThread(server,clientSock);
reader.start();
向客户端发送信息函数如下所示:
public synchronized void sendString(String str)
{
if(str==null)
{
disconnection();
return;
}
try
{
outStream.writeUTF(str);
}
catch(Exception writeError)
{
writeError.printStackTrace() ;
disconnection();
return;
}
}
程序清单:
package Server;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.io.*;
import java.net.*;
import java.util.*;
import com.borland.jbcl.layout.*;
import com.borland.jbcl.control.*;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2010</p>
*
* <p>Company: </p>
*
* @author www.jianfei5u.com
* @version 1.0
*/
public class ServerConn extends Object{
protected SimpleServer server;
protected Socket clientSock;
protected UserThread reader;
protected DataOutputStream outStream;
public ServerConn(SimpleServer server,Socket clientSock)throws IOException
{
this.server =server;
this.clientSock =clientSock;
outStream=new DataOutputStream(clientSock.getOutputStream());
reader=new UserThread(server,clientSock);
reader.start();
}
public synchronized void sendString(String str)
{
if(str==null)
{
disconnection();
return;
}
try
{
outStream.writeUTF(str);
}
catch(Exception writeError)
{
writeError.printStackTrace() ;
disconnection();
return;
}
}
public synchronized void disconnection()
{
try
{
reader.closeConnection();
}
catch(Exception e)
{
reader.stop();
}
}
}
未完待续。。。下篇 编写监听用户信息类
地址:http://java161.iteye.com/blog/616132