简单聊天客户端

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();}
				
			}
		}
}
相关文章
相关标签/搜索