如果用户想连接对方,那么只需要在"连接对方"按钮后面的文本输入域中输入欲连接的机器的IP地址,然后点击"连接对方"按钮即可。这时系统进入客户端状态,程序调用我们的MyClient 类,状态标签显示"正在建立连接"。如果连接过程中出现异常,或是连接失败则显示"连接失败"的字样。MyClient的源代码如下:
import java.net.*;
import java.io.*;public class MyClient
{
final int IN_PORT=9091;
final int OUT_PORT=9090;
PrintWriter m_printWriter;
MainClass m_mainClass;public void MyClient(String host,MainClass mainClass)
{
Socket socket_in=null,socket_out=null;
ClientThread client_read=null;
m_mainClass=mainClass;try
{
socket_in=new Socket(host,IN_PORT);
socket_out=new Socket(host,OUT_PORT);
m_mainClass.label.setText("正在进行连接");
client_read=new ClientThread(socket_in,this);
client_read.start();
m_printWriter=new PrintWriter(new OutputStreamWriter(socket_out.getOutputStream()),true);
}
catch(IOException e)
{
m_mainClass.label.setText("连接失败")
}
}public void writeStr(String s)
{
if(m_printWriter==null) 
return;
try
{
m_printWriter.println(s);
m_printWriter.flush();
}
catch(Exception e)
{
m_mainClass.label.setText("发送失败");
}
}public void readStr(String s)
{
m_mainClass.readStr(s);
}public void close()
{
try
{
socket_in.close();
socket_out.close();
m_printWriter.close();
m_mainClass.label.setText("已断开连接");

catch(Exception e)
{
m_mainClass.label.setText("断开操作失败");

}
}大家可以看到,这个类MyServer 类相似,只是用读写的端口正好相反。9090成了用于写的端口,而9091则成了用于读的端口。另外,我们也为每个用于读信息的套接字配备了一个线程(ClientThread类),用于不断的从中读取信息。ClientThread类的源代码如下:
import java.io.*;
import java.net.*;public class ClientThread extends Thread
{
Socket clientRequest;
BufferedReader input;
MyClient m_myClient;public void ClientThread(Socket s,MyClient mc)
{
clientRequest=s;
m_myClient=mc;try
{
input =new BufferedReader(new InputStreamReader(clientRequest.getInputStream()));
m_myServer=ms;
}
catch(Exception e)
{
m_myClient.m_mainClass.label.setText("信息读取失败");
}
} public void run
{
boolean done=false
String s=null;while(!done && m_myClient!=null)
{
try
{
s=input.readLine();
m_myClient.readStr(s);
}
catch(Exception e)
{
m_myClient.m_mainClass.label.setText("信息读取失败");
}
}
}
}一旦连接成功,两台机器通了气,那么彼此之间就成了一种双向通信,谁来扮演客户端或服务端就不再那么重要了。这时程序才真正进入我们希望的状态:可以聊天了。在"发送"按钮前面的Textfield里输入想说的话,然后点击"发送"按钮,这时在上方的文本领域里,就会出现刚才你输入的那句话。同时这句话还会沿网络传到对方那里,并显示在他的屏幕上。需要注意的是,要发送的话必须以"Talk:"开头,否则程序将不做任何处理。当然,显示的时候在接收方它会变成"对方"的字样,本地则变成了"我方"的字样。就是这么简单。
如果聊天中途想退出或是重新连接的话,单击"断开连接"按钮即可。这时程序就会进行一些操作,如关闭网络资源等等。同时,状态标签显示"已断开连接"的字样,如果出现异常,则显示"断开失败"的字样。
好了,至此,一个用Java语言实现的网络聊天程序就宣告完成了。程序比较简单,赶快自己试一下吧!虽然在功能、界面等方面都无法与MSN、QQ、ICQ同日而语,但毕竟是自己的辛苦成果,是不是很有些成就感呢?当然,这个程序离正式发布的标准还差得很远,有兴趣的读者可以自己尝试着使它更加完美。在这里它只是起一个抛砖引玉的作用,希望能给各位读者一点帮助,相信日后一定会有更多更好的程序诞生,我们一起期待ing……