简单的服务器和客户端程序代码实例

简单的服务器和客户端程序代码实例 

练习Socket,DataInputStream,DataOutputStream,Thread,ActionListener的应用,功能很简单就是客户端输入用户名回车服务器校验用户名是否合法,我定义了只有jiqimiao时才是合法的。

服务器端代码如下:

import  java.awt. * ;
import  java.io. * ;
import  java.net. * ;
import  java.util. * ;

import  javax.swing. * ;

/**
 * 服务器端程序
 * 
@author  左杰
 *
 
*/
public   class  TestServer  extends  JFrame {
    
/**
     * 
     
*/
    
private   static   final   long  serialVersionUID  =   - 4148974450944551683L ;

    
private  JTextArea jta  =   new  JTextArea();

    
public   static   void  main(String[] args) {
        
new  TestServer();
    }

    
public  TestServer() {
        
this .getContentPane().setLayout( new  BorderLayout());
        
this .getContentPane().add( new  JScrollPane(jta), BorderLayout.CENTER);
        setTitle(
" server " );
        setSize(
500 300 );
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(
true );
        
try  {
            ServerSocket serverSocket 
=   new  ServerSocket( 5000 ); // 绑定服务器端口
            jta.append( " server start at  "   +   new  Date()  +   " " );
            
while  ( true ) {
                Socket socket 
=  serverSocket.accept(); // 服务器监听
                
// 启动监听线程
                HandleClint thread  =   new  HandleClint(socket);
                thread.start();
            }
        } 
catch  (Exception e) {
            
//  TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
/**
 * 接收和发送客户端的线程
 * 
@author  左杰
 *
 
*/
    
class  HandleClint  extends  Thread {
        
private  Socket socket;

        
public  HandleClint(Socket socket) {
            
this .socket  =  socket;
        }

        
public   void  run() {
            
try  {
                DataInputStream inputFromClient 
=   new  DataInputStream(socket
                        .getInputStream());
                DataOutputStream outputToClient 
=   new  DataOutputStream(socket
                        .getOutputStream());
                
while  ( true ) {
                    String ins 
=  DataInputStream.readUTF(inputFromClient); // 接收客户端信息
                    String outs  =   " 您不是合法用户 " ;
                    
if  (ins.equals( " jiqimiao " )) {
                        outs 
=   " 欢迎您: "   +  ins;
                    }
                    outputToClient.writeUTF(outs);
// 发送到客户端信息
                    jta.append(outs  +   " " );
                }
            } 
catch  (Exception e) {
            }
        }
    }
}

客户端代码如下:

import  java.awt.BorderLayout;
import  java.awt.event.ActionEvent;
import  java.awt.event.ActionListener;
import  java.io.DataInputStream;
import  java.io.DataOutputStream;
import  java.io.IOException;
import  java.net.Socket;

import  javax.swing.JFrame;
import  javax.swing.JLabel;
import  javax.swing.JPanel;
import  javax.swing.JScrollPane;
import  javax.swing.JTextArea;
import  javax.swing.JTextField;

/**
 * 客户端程序
 * 
@author  左杰
 *
 
*/
public   class  TestClient  extends  JFrame  implements  ActionListener{
    
/**
     * 
     
*/
    
private   static   final   long  serialVersionUID  =   - 1751294222460334070L ;
    
private  JTextArea jta  =   new  JTextArea();
    
private  JTextField jtf  =   new  JTextField();
    
private  DataOutputStream toServer;
    
private  DataInputStream fromServer;
    
public   static   void  main(String[] args){
        
new  TestClient();
    }
    
public  TestClient(){
        JPanel p 
=   new  JPanel();
        p.setLayout(
new  BorderLayout());
        p.add(
new  JLabel( " 请输入用户名: " ),BorderLayout.WEST);
        p.add(jtf,BorderLayout.CENTER);
        jtf.setHorizontalAlignment(JTextField.LEFT);
        
        
this .getContentPane().setLayout( new  BorderLayout());
        
this .getContentPane().add(p,BorderLayout.NORTH);
        
this .getContentPane().add( new  JScrollPane(jta),BorderLayout.CENTER);
        jtf.addActionListener(
this ); // 添加事件侦听
        setTitle( " Client " );
        setSize(
500 300 );
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(
true );
        
try  {
            Socket socket 
=   new  Socket( " localhost " , 5000 ); // 链接指定服务器和端口
             this .fromServer  =   new  DataInputStream(socket.getInputStream());
            
this .toServer  =   new  DataOutputStream(socket.getOutputStream());
        }
catch  (IOException e) {
            
//  TODO Auto-generated catch block
            jta.append(e.toString() + " " );
        }
        
    }
    
public   void  actionPerformed(ActionEvent e) { // 定义侦听器
         if  (e.getSource()  instanceof  JTextField) {
            
try  {
                String tos 
=  jtf.getText().trim();
                toServer.writeUTF(tos);
                toServer.flush();
                String gets 
=  DataInputStream.readUTF(fromServer);;
                jta.append(gets
+ " " );
            } 
catch  (IOException e1) {
                
//  TODO Auto-generated catch block
                System.err.println(e1);
            }
            
            
        }
    }
    
}

大家共同学习,共同进步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值