import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleChatClient
{
JTextArea incoming;
JTextField outgoing;
BufferedReader reader;
PrintWriter writer;
Socket sock;
public static void main(String [] args)
{
SimpleChatClient client=new SimpleChatClient();
client.go();
}
public void go()
{
JFrame frame=new JFrame("Ludicrously Simple Chat Client");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel mainPanel=new JPanel();
incoming=new JTextArea(15,50);
incoming.setLineWrap(true);
incoming.setWrapStyleWord(true);
incoming.setEditable(false);
JScrollPane qScroller=new JScrollPane(incoming);
qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
JButton sendButton=new JButton("Send");
sendButton.addActionListener(new SendButtonListener());
mainPanel.add(qScroller);
outgoing=new JTextField(20);
mainPanel.add(outgoing);
mainPanel.add(sendButton);
setUpNetWorking();
//启动新的线程,以内部类作为任务,此任务是读取服务器的socket串流显示在文本区域
Thread readerThread=new Thread(new IncomingReader());
readerThread.start();
frame.getContentPane().add(BorderLayout.CENTER,mainPanel);
frame.setSize(650,600);
frame.setVisible(true);
}
private void setUpNetWorking()
{
try{
sock=new Socket("127.0.0.1",5000);
InputStreamReader streamReader=new InputStreamReader(sock.getInputStream());
reader=new BufferedReader(streamReader);
writer=new PrintWriter(sock.getOutputStream());
System.out.println("netWorking established");
}catch(IOException ex){ex.printStackTrace();}
}
public class SendButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent ev)
{
try{
writer.println(outgoing.getText());
writer.flush();
}catch(Exception ex){ex.printStackTrace();}
outgoing.setText("");
outgoing.requestFocus();
}
}
public class IncomingReader implements Runnable{
public void run()
{
String message;
try{
while((message=reader.readLine())!=null)
{
System.out.println("client read "+message);
incoming.append(message+"\n");
}
}catch(Exception ex){ex.printStackTrace();}
}
}
}
import java.io.*;
import java.net.*;
import java.util.*;
public class VerySimpleChatServer
{
ArrayList clientOutputStreams;
public static void main(String [] args)
{
new VerySimpleChatServer().go();
}
public class ClientHandler implements Runnable
{
BufferedReader reader;
Socket sock;
public ClientHandler(Socket clientSocket)
{
try{
sock=clientSocket;
InputStreamReader isReader=new InputStreamReader(sock.getInputStream());
reader=new BufferedReader(isReader);
}catch(Exception ex){ex.printStackTrace();}
}
public void run()
{
String message;
try{
while((message=reader.readLine())!=null)
{
System.out.println("read "+message);
tellEveryone(message);
}
}catch(Exception ex){ex.printStackTrace();}
}
}
public void go()
{
clientOutputStreams=new ArrayList();
try{
ServerSocket serverSock=new ServerSocket(5000);
while(true)
{
Socket clientSocket=serverSock.accept();
PrintWriter writer=new PrintWriter(clientSocket.getOutputStream());
clientOutputStreams.add(writer);
Thread t=new Thread(new ClientHandler(clientSocket));
t.start();
System.out.println("got a connection");
}
}catch(Exception ex){ex.printStackTrace();}
}
public void tellEveryone(String message)
{
Iterator it=clientOutputStreams.iterator();
while(it.hasNext())
{
try{
PrintWriter writer=(PrintWriter)it.next();
writer.println(message);
writer.flush();
}catch(Exception ex){ex.printStackTrace();}
}
}
}