`
judeylove
  • 浏览: 16736 次
  • 性别: Icon_minigender_1
  • 来自: 济南
最近访客 更多访客>>
社区版块
存档分类
最新评论

使用JAVA SOCKET写的一个CHAT程序,接收不到信息...何解?

阅读更多

服务器端:

java 代码
  1. import java.io.*;   
  2. import java.net.*;   
  3. import java.awt.*;   
  4. import java.awt.event.*;   
  5. import javax.swing.*;   
  6. import java.util.*;   
  7. public class ChatServe extends JFrame implements ActionListener{   
  8.     //文本区域类,用于向对方发送信息   
  9.     private JTextField jtf=new JTextField();   
  10.     //文本域类,用于记录双方聊天记录   
  11.     private JTextArea jta=new JTextArea();   
  12.     //来自客户端的信息   
  13.     private DataInputStream msgFromClient;   
  14.     //发往客户端的信息   
  15.     private DataOutputStream msgToClient;   
  16.     public static void main(String[] args) {   
  17.         new ChatServe();   
  18.     }   
  19.     public ChatServe(){//服务器端类的构造函数   
  20.         //建立一个写信息的面板   
  21.         JPanel p=new JPanel();   
  22.         p.setLayout(new BorderLayout());   
  23.         p.add(new JLabel("写信息:"),BorderLayout.WEST);   
  24.         p.add(jtf,BorderLayout.CENTER);   
  25.         jtf.setHorizontalAlignment(JTextField.LEFT);   
  26.            
  27.         getContentPane().setLayout(new BorderLayout());   
  28.         //把聊天记录区加到内容面板并加上一个滚动条   
  29.         getContentPane().add(p,BorderLayout.SOUTH);   
  30.         getContentPane().add(new JScrollPane(jta),BorderLayout.CENTER);   
  31.         //触发事件监听器   
  32.         jtf.addActionListener(this);   
  33.            
  34.         setTitle("聊天程序服务器端");   
  35.         setSize(500,300);   
  36.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
  37.         setVisible(true);   
  38.        
  39.     try{   
  40.         //建立服务器SOCKET   
  41.         ServerSocket serverSocket=new ServerSocket(8000);   
  42.         jta.append("聊天服务器开始时间"+new Date()+'\n');   
  43.         Socket socket=serverSocket.accept();   
  44.         msgFromClient=new DataInputStream(socket.getInputStream());   
  45.         msgToClient=new DataOutputStream(socket.getOutputStream());   
  46.           
  47.     }    
  48.         catch(IOException ex){   
  49.         System.out.println(ex);   
  50.     }   
  51.        
  52. }   
  53.     public void actionPerformed(ActionEvent e){   
  54.         String actionCommand=e.getActionCommand();   
  55.         if(e.getSource() instanceof JTextField){   
  56.            try{   
  57.                 String ToClient=jtf.getText().trim();   
  58.                 msgToClient.writeBytes(ToClient);   
  59.                 msgToClient.flush();   
  60.                    
  61.                 jta.append("服务器:"+ToClient+'\n');   
  62.                 String FromClient=msgFromClient.readUTF();   
  63.                
  64.                 jta.append("客户端:"+msgFromClient+'\n');   
  65.                   
  66.            }   
  67.            catch(IOException ex){   
  68.                System.out.println(ex);   
  69.     }   
  70.                
  71.         }   
  72.     }   
  73. }   

 

客 户端:

java 代码
  1. import java.io.*;   
  2. import java.net.*;   
  3. import java.awt.*;   
  4. import java.awt.event.*;   
  5. import javax.swing.*;   
  6. import java.util.*;   
  7. public class ChatClient extends JFrame implements ActionListener{   
  8.     //文本区域类,用于记录双方聊天内容   
  9.     private JTextField jtf=new JTextField();   
  10.     private JTextArea jta=new JTextArea();   
  11.     private DataInputStream  msgFromServer;   
  12.     private DataOutputStream msgToServer;   
  13.     public static void main(String[] args) {   
  14.         new ChatClient();   
  15.     }   
  16.     public ChatClient(){//服务器端类的构造函数   
  17.         JPanel p=new JPanel();   
  18.         p.setLayout(new BorderLayout());   
  19.         p.add(new JLabel("写信息:"),BorderLayout.WEST);   
  20.         p.add(jtf,BorderLayout.CENTER);   
  21.         jtf.setHorizontalAlignment(JTextField.LEFT);   
  22.            
  23.            
  24.         getContentPane().setLayout(new BorderLayout());   
  25.         //把聊天记录区加到内容面板并加上一个滚动条   
  26.         getContentPane().add(p,BorderLayout.SOUTH);   
  27.         getContentPane().add(new JScrollPane(jta),BorderLayout.CENTER);   
  28.            
  29.         jtf.addActionListener(this);   
  30.            
  31.         setTitle("聊天程序客户端");   
  32.         setSize(500,300);   
  33.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
  34.         setVisible(true);   
  35.        
  36.     try{   
  37.         //建立SOCKET   
  38.           
  39.         jta.append("聊天服务器开始时间"+new Date()+'\n');   
  40.         Socket socket=new Socket("localhost",8000);   
  41.        msgFromServer=new DataInputStream(socket.getInputStream());   
  42.        msgToServer=new DataOutputStream(socket.getOutputStream());   
  43.           
  44.     }    
  45.         catch(IOException ex){   
  46.         System.out.println(ex);   
  47.     }   
  48.        
  49. }   
  50.     public void actionPerformed(ActionEvent e){   
  51.         String actionCommand=e.getActionCommand();   
  52.         if(e.getSource() instanceof JTextField){   
  53.            try{   
  54.                 String ToServer=jtf.getText().trim();   
  55.                 msgToServer.writeBytes(ToServer);   
  56.                 msgToServer.flush();   
  57.                    
  58.                 jta.append("客户端:"+ToServer+'\n');   
  59.                 String FromServer=msgFromServer.readUTF();   
  60.                 jta.append("服务器:"+FromServer+'\n');   
  61.            }   
  62.            catch(IOException ex){   
  63.                System.out.println(ex);   
  64.     }   
  65.                
  66.         }   
  67.     }   
  68. }   
  69.   
不仅都收不到对方的信息,而且连关闭窗口都关不了,不知道为什么.请!
分享到:
评论
2 楼 gqf2008 2007-10-15  
写的有问题:
1、服务器端和客户端都必须有单独的读取流代码,这样才能在某一方写入消息是对方能接收到。
2、服务器端开了一个监听端口,必须用单独的线程来循环读取到达的连接。
1 楼 duanyu010 2007-10-14  
 
代码还真的多啊。
   一路过去 全部是代码。呵呵
加油啊 。

相关推荐

Global site tag (gtag.js) - Google Analytics