日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

java 点餐界面_Java小项目点餐系统(二)之服务端 | 学步园

發布時間:2023/12/19 windows 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 点餐界面_Java小项目点餐系统(二)之服务端 | 学步园 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

服務端詳解:

服務端的主要功能就是無限監聽一個端口號,對客戶端發來的連接請求給予回應,然后開辟新線程處理客戶端。界面做的比較簡單就是顯示在線的用戶,分為商家和學生。

一.監聽客戶端的socket連接請求

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=null;

LinkedList student,seller;

LinkedList mysocket;

public static void main(String args[])

{

new MainWindow("服務端");

}

public MainWindow(String s)

{

super(s);

student = new LinkedList();

seller = new LinkedList();

mysocket = new LinkedList();

addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

dispose();

System.exit(0);

}

}

);

//獲取屏幕大小

Dimension screenSize =Toolkit.getDefaultToolkit().getScreenSize();

//設置窗體的位置和大小

setBounds((screenSize.width-320)/2,(screenSize.height-240)/2,320,240);

setLayout(new GridLayout());

user_model = new DefaultTableModel(cellData,user_headers);

user_table = new JTable(user_model);

seller_model = new DefaultTableModel(cellData,seller_headers);

seller_table = new JTable(seller_model);

user_jscrollPane = new JScrollPane(user_table);

user_jscrollPane.setPreferredSize(new Dimension(160, 240));

seller_jscrollPane = new JScrollPane(seller_table);

seller_jscrollPane.setPreferredSize(new Dimension(160, 240));

add(user_jscrollPane);

add(seller_jscrollPane);

setVisible(true);

validate();

startServer();

}

void update()

{

user_model.setRowCount(0);

seller_model.setRowCount(0);

for(int i=0;i

{

user_model.addRow(new Object[]{i+1,student.get(i).account});

}

for(int i=0;i

{

seller_model.addRow(new Object[]{i+1,seller.get(i).account});

}

}

void startServer() {

int i = 0;

try {

//設置監聽端口號和最大接入數

server = new ServerSocket(8889, 3);

System.out.println("==========start===========快點來啊");

new Thread(new ListenThread(this)).start();

while (true) {

Socket socket = server.accept();

mysocket.add(socket);

i++;

System.out.println("第" + i + "個用戶連接成功!");

System.out.println("該用戶端的地址信息為:"+socket.getInetAddress());

new Thread(new ServerThread(socket,this)).start();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

class ListenThread implements Runnable

{

private MainWindow mainWindow;

public ListenThread(MainWindow mainWindow)

{

this.mainWindow = mainWindow;

}

public void run()

{

while(true)

{

for(int i=0;i

{

if(mainWindow.mysocket.get(i).isClosed())

{

for(int j=0;j

{

if(mainWindow.student.get(i).address == mainWindow.mysocket.get(i).getInetAddress())

mainWindow.student.remove(mainWindow.student.get(i));

}

for(int j=0;j

{

if(mainWindow.seller.get(i).address == mainWindow.mysocket.get(i).getInetAddress())

mainWindow.seller.remove(mainWindow.seller.get(i));

}

mainWindow.update();

mainWindow.mysocket.remove(mainWindow.mysocket.get(i));

System.out.println("客戶端已經斷開");

}

}

try

{

Thread.sleep(500);

}

catch(Exception e)

{}

}}

}

在進程中使用while循環不斷監聽客戶端發過來的請求,一旦請求建立成功就新建一個ServerThread子線程來處理客戶端的請求,而主線程繼續等待。同時開辟一個ListenThread線程不斷判斷哪一個線程已經斷開連接。

二.在ServerThread中對客戶端的請求進行處理

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

{

if(account.equals(mainWindow.student.get(i).account))

{

socket.close();

}

}

for(int i=0;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"))

{

}

}

}

先讀取客戶端發來的請求,然后進入對應的功能模塊,如果是用戶登錄,則進行sql語句操作并對結果做出反應,如果查詢錯誤則關閉該線程,判斷為學生則加入學生鏈表并初始化學生端的商品信息和店鋪信息,判斷為商家則把改商家的商品信息發過去并查找相應的訂單表,把屬于該商家的訂單發給商家。

服務端的主要功能就是利用socket和多線程把學生端和商家端連接起來,并把所有對數據的操作集中在服務端來做,全部由服務端與數據庫進行交互,保證數據的安全。

總結

以上是生活随笔為你收集整理的java 点餐界面_Java小项目点餐系统(二)之服务端 | 学步园的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。