首页 > 代码库 > Java小项目点餐系统(二)之服务端

Java小项目点餐系统(二)之服务端

服务端详解:

服务端的主要功能就是无限监听一个端口号,对客户端发来的连接请求给予回应,然后开辟新线程处理客户端。界面做的比较简单就是显示在线的用户,分为商家和学生。


一.监听客户端的socket连接请求

<span style="font-family:KaiTi_GB2312;font-size:18px;">package mainjframe;

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.LinkedList;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class MainWindow extends JFrame{
	ServerSocket server;
	JTable user_table;
	JTable seller_table;
	JScrollPane user_jscrollPane;
	JScrollPane seller_jscrollPane;
	DefaultTableModel user_model;
	DefaultTableModel seller_model;
	String []user_headers = {"序号","在线学生"};
	String []seller_headers = {"序号","在线商家"};
	Object [][]cellData=http://www.mamicode.com/null;		>在进程中使用while循环不断监听客户端发过来的请求,一旦请求建立成功就新建一个ServerThread子线程来处理客户端的请求,而主线程继续等待。同时开辟一个ListenThread线程不断判断哪一个线程已经断开连接。

二.在ServerThread中对客户端的请求进行处理

<span style="font-family:KaiTi_GB2312;font-size:18px;">package mainjframe;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class ServerThread implements Runnable {  
  
    private Socket socket;
    private String accept;
    String account,passwd;
    DataInputStream in = null;
    DataOutputStream out = null;
    LinkMySql linkMySql;
    String dept;
    private MainWindow mainWindow;
	// 创建静态全局变量

    
    public ServerThread(Socket socket,MainWindow mainWindow)
    {  
    	this.mainWindow = mainWindow;
        this.socket = socket;  
        linkMySql = new LinkMySql(this);
    }  
  
    // 任务是为一个用户提供服务  
    @Override  
    public void run() 
    {  
        try
        {  
            // 读取客户端传过来信息的DataInputStream  
        	in = new DataInputStream(socket.getInputStream());  
            // 向客户端发送信息的DataOutputStream  
            out = new DataOutputStream(socket.getOutputStream());   
            System.out.println("放马过来吧!!!!");
            // 读取来自客户端的信息  
            accept = in.readUTF();  
            System.out.println(accept);
        }    
        catch (IOException e)
        {  
            e.printStackTrace();  
        }
        if(accept.equals("LOGIN"))
        {
            try
            {
                  account = in.readUTF();
                  		passwd = in.readUTF();
                 System.out.println("用户名:"+account+"\n密码:"+passwd);
                 for(int i=0;i<mainWindow.student.size();i++)
                 {
                	 if(account.equals(mainWindow.student.get(i).account))
                	{
                		 socket.close();
                	}
                 }
                 for(int i=0;i<mainWindow.seller.size();i++)
                 {
                	 if(account.equals(mainWindow.seller.get(i).account))
                	{
                		 socket.close();
                	}
                 }
                 dept = linkMySql.query(account,passwd);
                 out.writeUTF(dept);
                 if(dept.equals("student"))
                 {
                	 User temp = new User();
                	 temp.account = account;
                	 temp.passwd = passwd;
                	 temp.type = "student";
                	 temp.address = socket.getInetAddress();
                	 mainWindow.student.add(temp);
                	 mainWindow.update();
                	 linkMySql.initStudent(in,out);
                	 linkMySql.handleOrder();
                	 
                 }
                 else if(dept.equals("seller"))
                 {
                	 User temp = new User();
                	 temp.account = account;
                	 temp.passwd = passwd;
                	 temp.type = "seller";
                	 temp.address = socket.getInetAddress();
                	 mainWindow.seller.add(temp);
                	 mainWindow.update();
                	 linkMySql.initseller(in,out);
                 }
            }
            catch(IOException e)
            {
            }
        }
        else if(accept.equals("REGISTER"))
        {
        	
        }
    }
}  </span>
    先读取客户端发来的请求,然后进入对应的功能模块,如果是用户登录,则进行sql语句操作并对结果做出反应,如果查询错误则关闭该线程,判断为学生则加入学生链表并初始化学生端的商品信息和店铺信息,判断为商家则把改商家的商品信息发过去并查找相应的订单表,把属于该商家的订单发给商家。

    服务端的主要功能就是利用socket和多线程把学生端和商家端连接起来,并把所有对数据的操作集中在服务端来做,全部由服务端与数据库进行交互,保证数据的安全。

Java小项目点餐系统(二)之服务端