sendMsg(i,tempMsg);
}
returnmsg;
}
privatevoidsendMsg(intindex,Stringmsg){//向特定客户转发,msg为转发信息
SockettempSocket=clientVector.get(index).socket;//index为客户在clientVector中位置
try{
PrintWriterpw=newPrintWriter(tempSocket.getOutputStream(),true);
pw.println(msg);
}
catch(IOExceptionprintError){}
}
publicvoidrun(){//建立读写流
Stringmsg=null;
InputStreamReaderisr=null;
BufferedReaderbr=null;
try{
isr=newInputStreamReader(socket.getInputStream());
br=newBufferedReader(isr);
}
catch(IOExceptioninOutError){
System.out.println("无法与客户建立流!
!
");
delSocket();
return;
}
do{
try{
msg=br.readLine();
}
catch(IOExceptionreadError){
System.out.println("读取流数据错误!
!
");
delSocket();
return;
}
System.out.println(msg);
msg=msgForward(msg);//处理读取的数据
if(msg.startsWith("#")==true){//若有系统提示返回,则返回系统提示
try{
PrintWriterpw=newPrintWriter(socket.getOutputStream(),true);
pw.println(msg);
}
catch(IOExceptionprintError){}
}
}
while(true);
}
}
publicclassChatServer{
publicstaticvoidmain(Stringargs[]){
ServerSocketserverSocket=null;
Socketsocket=null;
SocketThreadst;
try{
serverSocket=newServerSocket(8324);//监听端口8324
System.out.println("服务器启动成功,正在监听8324端口!
!
");
}
catch(IOExceptione){
System.out.println("不能使用端口8324,无法启动服务器!
!
");
return;
}
while(true){
try{
socket=serverSocket.accept();//获得连接,并建立Socket
}
catch(IOExceptione){
System.out.println("不能建立连接:
"+socket.getInetAddress().toString()+"/"+socket.getPort());
}
st=newSocketThread(socket);//创建新线程
System.out.println("建立连接:
"+socket.getInetAddress().toString()+"/"+socket.getPort());
st.start();//开始新线程
}
}
}
客户端ChartClient
主要代码:
packagech02;
privatevoidinitSocket(){//对socket的初始化
try{
transferSocket=newSocket("localhost",8324);//与服务器建立连接
ReceiveThreadrt=newReceiveThread(transferSocket,this);
rt.start();//开启新线程用于读取数据流
}
catch(IOExceptioncreateError){//出现错误则退出程序
welcomeInfo.setText("无法连接服务器!
!
");
try{
transferSocket.close();
welcomeInfo.setText("与服务器连接已经断开!
!
");
System.exit(0);
}
catch(IOExceptioncloseError){}
System.exit(0);
}//对输出流的初始化
try{
socketWriter=newPrintWriter(transferSocket.getOutputStream(),true);
}
catch(IOExceptionstreamError){
welcomeInfo.setText("流建立错误!
!
");
try{
transferSocket.close();
welcomeInfo.setText("与服务器连接已经断开!
!
");
System.exit(0);
}
catch(IOExceptioncloseError){}
System.exit(0);
}
}
publicvoidaddNewMsg(Stringmsg){//向chatRecord中追加数据
chatRecord.append(msg+"\r\n");
}
publicvoidsetWelcome(Stringmsg){//改变welcomeInfo值
welcomeInfo.setText(msg);
}
publicvoidwindowIconified(WindowEvente){}
publicvoidwindowClosed(WindowEvente){}
publicvoidwindowDeactivated(WindowEvente){}
publicvoidwindowActivated(WindowEvente){}
publicvoidwindowClosing(WindowEvente){//窗体关闭事件
System.exit(0);
}
publicvoidwindowDeiconified(WindowEvente){}
publicvoidwindowOpened(WindowEvente){}
publicvoidkeyPressed(KeyEvente){//对键盘事件的监视
switch(e.getKeyCode()){
caseKeyEvent.VK_ENTER:
//回车键,就发送信息
sendMsg();//向服务器发送信息
break;
caseKeyEvent.VK_CANCEL:
//esc键则,friendList选中第0项
friendList.select(0);
transName.setText("发送给:
"+friendList.getSelectedItem().toString());
break;
default:
}
}
publicvoidkeyTyped(KeyEvente){}
publicvoidkeyReleased(KeyEvente){}
publicvoiditemStateChanged(ItemEvente){//监视friendList选中项变化
if(e.getSource().equals(friendList)){//改变transName值
transName.setText("发送给:
"+friendList.getSelectedItem().toString());
}
}
publicvoidtextValueChanged(TextEvente){//若chatRecod字符多余100000
if(chatRecord.getText().length()>100000){//则清除部分历史记录,防止占用过大内存
chatRecord.setText(chatRecord.getText().substring(chatRecord.getText().indexOf("\r\n")+2));
}
}
publicvoidactionPerformed(ActionEvente){//点击sendButton则发送信息
if(e.getSource()==sendButton){
sendMsg();
}
}
publicvoidsendMsg(){//向服务器发送信息
if(msgEditor!
=null){
if(friendList.getSelectedIndex()==0){//发送全体聊天信息
socketWriter.println(msgEditor.getText());
}
else{//发送密语,并回显
socketWriter.println("!
"+friendList.getSelectedItem().toString()+""+msgEditor.getText());
chatRecord.append(this.nick+"对"+friendList.getSelectedItem().toString()+"悄悄说:
\