`
shishui5271314
  • 浏览: 9065 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

UDP协议局域网聊天

阅读更多

 

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TCPTalk extends JFrame implements ActionListener{
     public static void main(String[] args){
           new TCPTalk();
      }

      JLabel jl_state,jl_purpose,jl_receive,jl_name;
      JTextField jt_state,jt_purpose,jt_name,jt_sendmeg;
      JButton jb_connection,jb_uncon,jb_sendmeg;
      JTextArea textArea;
      JRadioButton ServerRadio,ClientRadio;
      JPanel jp1,jp2,jp3,jp4;
      JScrollPane megJScrollPane;
      String meg;
      TCP_server t1;
      TCP_client t2;
      ServerSocket serversocket;
      Socket Ssocket,Csocket;
      BufferedReader in1;
      PrintWriter out1;
      public TCPTalk(){
           super("TCP聊天");
           Container cont=getContentPane();
           cont.setLayout(null);
           ButtonGroup bg = new ButtonGroup();
           ServerRadio = new JRadioButton("服务器",true);
           ServerRadio.setSize(80,20);
           ServerRadio.setFont(new Font("宋体",Font.BOLD,14));
           ServerRadio.setLocation(10,20);
           bg.add(ServerRadio);
           cont.add(ServerRadio);
           ClientRadio = new JRadioButton("客户端",false);
           ClientRadio.setSize(80,20);
           ClientRadio.setFont(new Font("宋体",Font.BOLD,14));
           ClientRadio.setLocation(100,20);
           cont.add(ClientRadio);
           bg.add(ClientRadio);
           jl_state=new JLabel("连接状态");
           jl_state.setSize(100,20);
           jl_state.setFont(new Font("宋体",Font.BOLD,14));
           jl_state.setLocation(190,20);
           cont.add(jl_state);
           jt_state = new JTextField("离线");
           jt_state.setBackground(Color.gray);
           jt_state.setSize(100,20);
           jt_state.setFont(new Font("宋体",Font.PLAIN,14));
           jt_state.setLocation(320,20);
           cont.add(jt_state);
 
           jl_purpose=new JLabel("连接主机IP");
           jl_purpose.setSize(100,20);
           jl_purpose.setFont(new Font("宋体",Font.BOLD,14));
           jl_purpose.setLocation(10,50);
           cont.add(jl_purpose);
           jt_purpose=new JTextField("127.0.0.1");
           jt_purpose.setForeground(Color.orange);
           jt_purpose.setSize(250,20);
           jt_purpose.setLocation(120,50);
           cont.add(jt_purpose);
           jb_connection=new JButton("连接");
           jb_connection.setSize(100,20);
           jb_connection.setFont(new Font("宋体",Font.BOLD,14));
           jb_connection.setLocation(380,50);
           cont.add(jb_connection);
           jb_connection.addActionListener(this);
 
           jl_receive=new JLabel("接受到的信息");
           jl_receive.setSize(100,20);
           jl_receive.setFont(new Font("宋体",Font.BOLD,14));
           jl_receive.setLocation(10,80);
           cont.add(jl_receive);
           textArea = new JTextArea();
           textArea.setForeground(Color.red);
           textArea.setLineWrap(true);
           textArea.setSize(250,200);
           textArea.setFont(new Font("宋体",Font.BOLD,12));
           megJScrollPane = new JScrollPane(textArea);
           megJScrollPane.setSize(250,200);
           megJScrollPane.setLocation(120,80);
           cont.add(megJScrollPane);
           jb_uncon=new JButton("结束连接");
           jb_uncon.setSize(100,20);
           jb_uncon.setFont(new Font("宋体",Font.BOLD,14));
           jb_uncon.setLocation(380,80);
           cont.add(jb_uncon);
           jb_uncon.addActionListener(this);
           jl_name=new JLabel("你的昵称");
           jl_name.setSize(100,20);
           jl_name.setFont(new Font("宋体",Font.BOLD,14));
           jl_name.setLocation(10,260);
           cont.add(jl_name);
 
           jt_name=new JTextField();
           jt_name.setSize(100,20);
           jt_name.setFont(new Font("宋体",Font.BOLD,14));
           jt_name.setLocation(10,300);
           cont.add(jt_name);
           jt_sendmeg=new JTextField();
           jt_sendmeg.setSize(250,20);
           jt_sendmeg.setFont(new Font("楷体",Font.BOLD,14));
           jt_sendmeg.setLocation(120,300);
           cont.add(jt_sendmeg);
           jb_sendmeg=new JButton("发送信息");
           jb_sendmeg.setSize(100,20);
           jb_sendmeg.setFont(new Font("楷体",Font.BOLD,14));
           jb_sendmeg.setLocation(380,300);
           cont.add(jb_sendmeg);
           jb_sendmeg.addActionListener(this);
 
           t1=new TCP_server();
           t2=new TCP_client();
           setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           setSize(500, 400);
           setVisible(true);
           setResizable(false);
 }
           public void actionPerformed(ActionEvent e){
                     if(e.getSource()==jb_connection)//判断是否按下连接按钮
                          {
                              if(ServerRadio.isSelected()==true)//判断是否选为服务器端
                               {
                                    meg= "";
                                    jt_sendmeg.setText("");
                                    t1.start();
                               }else{
                                    meg= "";
                                    jt_sendmeg.setText("");
                                    t2.start();
                               }
                          }
                     if(e.getSource()==jb_sendmeg)
                     {
                               out1.write(jt_name.getText()+"说:"+jt_sendmeg.getText()+"\n");
                               textArea.append("我说:"+jt_sendmeg.getText()+"\n");
                               out1.flush();
                               jt_sendmeg.setText("");
 
                     }
                     if(e.getSource()==jb_uncon)
                     {
                          try{
                               if(ServerRadio.isSelected()==true){
                                    Ssocket.close();
                                    serversocket.close();
                                    jt_state.setText("离线");
                                    jt_state.setBackground(Color.gray);
                                    jb_sendmeg.setEnabled(false);
                                    jb_uncon.setEnabled(false);
                                    jb_connection.setEnabled(true);
                               }else{
                                    Csocket.close();
                                    jt_state.setText("离线");
                                    jt_state.setBackground(Color.gray);
                                    jb_sendmeg.setEnabled(false);
                                    jb_uncon.setEnabled(false);
                                    jb_connection.setEnabled(true);
                               }
                          }catch(IOException e2)
                          {
                               jt_state.setText("发生错误!");
                           }
                     }
           }
           class TCP_server extends Thread{
                     public TCP_server(){
 
                     }
                     public void run()
                     {
                          try{
                                    jb_connection.setEnabled(false);
                                    jb_uncon.setEnabled(true);
                                    jt_state.setText("等待连接...");
                                    jt_purpose.setText(InetAddress.getLocalHost().getHostAddress());
                                    serversocket=new ServerSocket(8000);
                                    Ssocket=serversocket.accept();
                                    in1=new BufferedReader(new InputStreamReader(Ssocket.getInputStream()));
                                    out1=new PrintWriter(Ssocket.getOutputStream(),true);
                                    while(true){
                                              if(Ssocket.isBound()==true){ 
                                                        jt_state.setText("通话中...");
                                                        jt_state.setBackground(Color.green);
                                                        jb_uncon.setEnabled(true);
                                                        jb_sendmeg.setEnabled(true);
                                                        break;
                                              }
                                    }
                                    while(true)
                                    {
                                         meg=in1.readLine();
                                         if(meg.length()>0)
                                         {
                                              textArea.append(meg);
                                              textArea.append("\n");
                                         }
                                    }
 
                               }catch(IOException e){}
 
                         }
           }
           class TCP_client extends Thread{
                     public TCP_client(){
 
                     }
                     public void run()
                     {
                          try{
                                    jb_connection.setEnabled(false);
                                    jt_state.setText("等待连接...");
                                    Csocket=new Socket();
                                    Csocket.connect(new InetSocketAddress(jt_purpose.getText(),8000),5000);
                                    in1= new BufferedReader(new InputStreamReader(Csocket.getInputStream()));
                                    out1=new PrintWriter(Csocket.getOutputStream(),true);
                                    while(true){
                                              if(Csocket.isConnected()==true){
                                                   jt_state.setText("通话中...");
                                                   jt_state.setBackground(Color.green);
                                                   jb_uncon.setEnabled(true);
                                                   jb_sendmeg.setEnabled(true);
                                                   break;
                                              }
                                    }
 
                                    meg= "";
                                    while(Csocket.isConnected()==true){
                                              meg=in1.readLine();
                                              if(meg.length()>0){
                                                        textArea.append(meg);
                                                        textArea.append("\n");
                                    }
                               }
                          }catch(IOException e){
                               jt_state.setText("无法连接到指定服务器!");
                          }
                     } 
                 }
          }
 
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics