📄 simpleserversocket.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.util.*;
import java.io.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
import java.util.Hashtable;
public class simpleserversocket extends JFrame implements ActionListener {
JLabel lab1 = new JLabel("Users Online");
JLabel lab2 = new JLabel("Message");
JTextArea ta = new JTextArea(9,30);
java.awt.List list = new java.awt.List(9);
JTextField tf = new JTextField(24);
JButton b = new JButton("Send");
JScrollPane sp = new JScrollPane(ta);
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
ServerSocket serverSocket;
Socket socket;
ArrayList array = new ArrayList(); // the connected client list
int connect;
//ArrayList roomType = new ArrayList();
public simpleserversocket()
{
super("Hotel Booking Broker");
sp.getViewport().add(ta);
p1.setLayout(new BorderLayout());
p3.add(lab1);
p1.add(p3,BorderLayout.NORTH);
p1.add(list,BorderLayout.SOUTH);
p2.add(lab2);
p2.add(tf);
p2.add(b);
getContentPane().add(sp,BorderLayout.NORTH);
getContentPane().add(p1,BorderLayout.CENTER);
getContentPane().add(p2,BorderLayout.SOUTH);
pack();
//display the broker server in the center of the screen
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = this.getSize();
if(frameSize.width > screenSize.width)
{
frameSize.width = screenSize.width;
}
if(frameSize.height > screenSize.height)
{
frameSize.height = screenSize.height;
}
setLocation((screenSize.width - frameSize.width)/2,
(screenSize.height - frameSize.height)/2);
//add button to handle events
b.addActionListener(this);
setSize(450,450);
setVisible(true);
setResizable(false);
//server starts to listen ports
if(serverSocket == null)
{
try
{
serverSocket = new ServerSocket(7000);
ta.append("SYSTEM:" + " Hotel Booking Broker "
+ " started successfully......\n");
}
catch(IOException ex)
{
ta.append("SYSTEM:"+" Hotel Booking Broker "
+" started unsuccessfully.....\n");
ex.printStackTrace();
}
}
else
{
ta.append("SYSTEM:"+" Hotel Booking Broker "
+" started successfully......\n");
}
////////////////////////////////////////////////////
while(true)
{
if(array.size() <= 10)
{
try
{
socket = serverSocket.accept();
ta.append("One Client login successfully:\n");
}
catch(IOException ex)
{
ta.append("SYSTEM: "+ex+"\n");
}
/////////////////////////////////////////////////////
//Create client thread,one thread for one client only
Client c = new Client(socket); //Client class extends thread
array.add(c);
c.start();
/////////////////////////////////////////////////////
}
else
{
ta.append("SYSTEM:"+" Hotel Booking Broker "
+" has been fully connected,please try later!\n");
}
}
}
/////////////////////////////////////////////////////////////
class Client extends Thread //thread class respond to User client
{
String name;
String ip;
String ipAddress;
Socket socket;
//Socket socket_hotel; //for set up connection with the user selected hotel
BufferedReader br;
PrintStream ps;
public Client(Socket s)
{
try
{
socket = s;
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
ps = new PrintStream(s.getOutputStream());
}
catch (IOException ex)
{
ta.append("SYSTEM: "+ex+"\n");
}
}
public void run()
{
String info;
try
{
while(true)
{
info = br.readLine();
if(info == null)
break;
StringTokenizer st = new StringTokenizer(info, ":");
String keyword = st.nextToken();
//process messages sent from client
if (keyword.equals("CONNECT")) //header CONNECT refers to the first communication
{
name = st.nextToken();
ip = st.nextToken();
ipAddress = ip.substring(ip.indexOf("/")+1); //???????
ta.append("SYSTEM: " + name + "/"
+ ipAddress +" connected to the system!\n");
list.add(name + ":" + ip
+":login successfully");
refreshClientList();
//implement the broker menu list here and send it to the connected client
ps.println(new StringBuffer("MENU:"+"1.Cities available"));//Send client the menu message.
//ps.flush();
ps.println(new StringBuffer("MENU:"+"2.Book a room"));//Send client the menu message.
//ps.flush();
ps.println(new StringBuffer("MENU:"+"3.About us"));
ps.println(new StringBuffer("MENU:"+"4.Hotel Vacancy Request"));
ps.println(new StringBuffer("MENU:"+"5.Hotels available"));
ps.println(new StringBuffer("MENU:"+"----------------------------"));//Send client the menu message.
ps.flush();
}
if(keyword.equals ("1"))
{
List<String> city = getCity();
Iterator it = city.iterator();
while(it.hasNext())
{
ps.println(new StringBuffer("OPTION:" + it.next()));
}
ps.println(new StringBuffer("OPTION:" + "-----------------------"));
ps.println(new StringBuffer("OPTION:" + "Input 0 to go back the main menu..."));
ps.println(new StringBuffer("OPTION:" + "-----------------------"));
ps.flush();
String userInput = br.readLine();
if(userInput != null)
{
ps.println(new StringBuffer("MENU:"+"1.Cities available"));//Send client the menu message.
ps.println(new StringBuffer("MENU:"+"2.Book a room"));//Send client the menu message.
ps.println(new StringBuffer("MENU:"+"3.About us"));
ps.println(new StringBuffer("MENU:"+"4.Hotel Vacancy Request"));
ps.println(new StringBuffer("MENU:"+"5.Hotels available"));
ps.println(new StringBuffer("MENU:"+"----------------------------"));//Send client the menu message.
ps.flush();
}
continue;
}
if(keyword.equals ("2"))
{
ps.println(new StringBuffer("OPTION:" +"Please choose a city:"));
ArrayList<String>city = getCity();
Iterator its = city.iterator();
while(its.hasNext())
{
ps.println(new StringBuffer("OPTION:" + its.next()));
}
ps.println(new StringBuffer("OPTION:" + "-----------------------"));
ps.flush();
String userSelectedCity = br.readLine();
ta.append("User input:" + userSelectedCity + "\n");
if(userSelectedCity != null)
{
ps.println(new StringBuffer("OPTION:" +"Please choose a hotel:"));
ArrayList<String> hotelList = getHotel(userSelectedCity);
Iterator itss = hotelList.iterator();
while(itss.hasNext())
{
ps.println(new StringBuffer("OPTION:" + itss.next()));
ps.flush();
}
ps.println(new StringBuffer("OPTION:" + "-----------------------"));
ps.flush();
String userSelectedHotel = br.readLine();
if(userSelectedHotel != null)
{
ps.println(new StringBuffer("OPTION:" + "Connecting to "+ userSelectedHotel + " hotel database..."));
ps.flush();
int port = getPortNumber(userSelectedCity,userSelectedHotel);
ArrayList<String> room_type = HotelConnector(port,"TYPE");
//Socket hotel_socket = HotelConnector(port);
//BufferedReader br_hotel = new BufferedReader(new InputStreamReader(hotel_socket.getInputStream()));
//PrintStream ps_hotel = new PrintStream(hotel_socket.getOutputStream());
ps.println(new StringBuffer("OPTION:" + "Connection established successfully!"));
ps.println(new StringBuffer("OPTION:" + "Welcome to " + userSelectedHotel + " hotel..."));
ps.println(new StringBuffer("OPTION:" + "-----------------------"));
ps.println(new StringBuffer("OPTION:" + "Please select room type:"));
Iterator itsss = room_type.iterator();
while(itsss.hasNext())
{
ps.println(new StringBuffer("OPTION:" + itsss.next()));
ps.println(new StringBuffer("OPTION:" + "-----------------------"));
}
//ps.println(new StringBuffer("OPTION:" + "-----------------------"));
ps.flush();
String userSelectedRoomType = br.readLine();
if(userSelectedRoomType != null)
{
ps.println(new StringBuffer("OPTION:" + "Please wait for processing your request..."));
ps.println(new StringBuffer("OPTION:" + "-----------------------"));
ps.flush();
ArrayList<String> empty_room = HotelConnector(port,userSelectedRoomType);
int number = empty_room.size();
ps.println(new StringBuffer("OPTION:" + "We have " + number +" "+ userSelectedRoomType + " rooms empty now"));
ps.println(new StringBuffer("OPTION:" + "-----------------------"));
ps.println(new StringBuffer("OPTION:" + "Which one do you want to book?"));
ps.flush();
Iterator itssss = empty_room.iterator();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -