简单聊天客户端

来源:互联网 发布:淘宝女士棉袄 编辑:程序博客网 时间:2024/05/16 09:32
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();}}}}


0 0
原创粉丝点击