import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.awt.BorderLayout;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class URLBai3Server
{
private String url = "http://www.timeanddate.com/weather/";
private ServerSocket server;
DataOutputStream dos;
DataInputStream din;
//--- ham dung 1 doi so--------------------------
public URLBai3Server(int so) throws Exception{
server=new ServerSocket(so);
System.out.println("server started!!!");
}
//--- ham tra ve xau chua ten cac city phan biet boi ki tu '@'-----
public String init() {
String strcity="";
int i;
BufferedInputStream bis;
Object ob;
try {
URL u = new URL(url);
ob = u.getContent();
if (ob instanceof InputStream) {
BufferedInputStream t = new BufferedInputStream((InputStream) ob);
String st = "";
while ((i = t.read()) > 0)
{ st = st + (char) i; }
Pattern pt1 = Pattern.compile("<tr class=c[\\d]>.+?</tr>");
Matcher st1 = pt1.matcher(st);
while (st1.find())
{ String st21 = st1.group();
Pattern pt2 = Pattern.compile("<a.+?</a>");
Matcher st2 = pt2.matcher(st21);
if (st2.find()) {
String tp = st2.group();
tp = tp.replaceAll("<.+?>", "");
strcity+="@"+tp;
}
}
}
}
catch (MalformedURLException e)
{ System.out.println(e); }
catch (IOException e1)
{ System.out.println(e1); }
return strcity;
}
public static String ConvertC(float c)
{
float de;
de=(c-32)*5/9;
return c + " °C";
}
//---Ham tra ve time cua city co name la nameCity---------------
public float getWeatherOfCity(String nameCity)
{
int i;
String str="0";
BufferedInputStream bis;
Object ob;
try {
URL u = new URL(url);
ob = u.getContent();
if (ob instanceof InputStream) {
BufferedInputStream t = new BufferedInputStream((InputStream) ob);
String st = "";
while ((i = t.read()) > 0)
{ st = st + (char) i; }
Pattern pt1 = Pattern.compile(">" + nameCity + ".+?class=r.+?F</td>");
Matcher st1 = pt1.matcher(st);
while (st1.find()){
String temp = st1.group();
temp = temp.replace("</td>", "");
temp = temp.replace(" °F", "");
temp = temp.replaceAll(">.*>", "");
return Float.parseFloat(temp);
}
}
}
catch (MalformedURLException e) { System.out.println(e); }
catch (IOException e1) { System.out.println(e1); }
return Float.parseFloat(str);
}
//-----ham chay cua server---------------------------------------
public void run(){
try{
boolean ck=true;
Socket sk= server.accept();
dos= new DataOutputStream(sk.getOutputStream());
din = new DataInputStream(sk.getInputStream());
while(true)
{
if(ck){
dos.writeUTF(init());
ck=false;
}
String ct = din.readUTF();
dos.writeUTF(ConvertC(getWeatherOfCity(ct)));
}
}
catch(Exception e){
}
}
//--- ham main--------------------------------------------------
public static void main(String[] args) throws Exception
{
URLBai3Server ser= new URLBai3Server(7777);
ser.run();
}
}
Tại phía Client:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class URLBai3Client extends Thread{
DataInputStream din;
DataOutputStream dos;
Socket socket;
private String sendMess;
private String revMess;
private String userName="";
//--- ham dung khong doi so----------------------------------
public URLBai3Client() throws Exception{
socket = new Socket("localhost", 7777);
din = new DataInputStream(socket.getInputStream());
dos = new DataOutputStream(socket.getOutputStream());
sendMess="Wellcome";
}
//--- ham gan gia tri xau se duoc gui di---------------
public void setSendMess(String mes)
{
sendMess=mes;
}
//--- ham gan gia tri khac cho xau nhan----------------
public void setRevMess(String mes)
{
revMess=mes;
}
//-------ham lay gia tri cua revMess----
public String getRevMess()
{
return revMess;
}
//--- ham gui xau messLog len server------------------
public void sendMessLog(String messLog) throws Exception
{
dos.writeUTF(messLog);
}
//--- ham run (overwrite)------------------
public void run(){
try{
while(true) {
revMess=din.readUTF();
String st= revMess.substring(0,1);
if(st.equals("@"))
{
String[] arrct= revMess.split("@");
for(int i=0;i<arrct.length;i++)
URLBai3GuiClient.jComboBox.addItem(arrct[i]);
}
else
URLBai3GuiClient.jLabel.setText(revMess);
dos.flush();
}
}
catch(Exception e){}
}
}
GUIClient:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class URLBai3GuiClient extends JFrame implements ActionListener{
URLBai3Client t;
static JComboBox jComboBox = new JComboBox();
static JLabel jLabel = new JLabel("Please choice name City and press OK");
private JButton button = new JButton("DisPlay");
private String url = "http://www.timeanddate.com/weather/";
private JPanel main = new JPanel();
private JPanel jp1= new JPanel();
private JPanel jp2= new JPanel();
private JPanel jp3= new JPanel();
//---- ham dung ko doi so--------------------
public URLBai3GuiClient() throws Exception{
super("Time");
t=new URLBai3Client();
t.start();
jp1.add(jComboBox);
jp2.add(jLabel);
jp3.add(button);
main.setLayout(new BorderLayout());
main.add(jp1, BorderLayout.NORTH);
main.add(jp2, BorderLayout.CENTER);
main.add(jp3, BorderLayout.SOUTH);
button.addActionListener(this);
this.setContentPane(main);
this.setSize(300,150);
this.show();
this.setVisible(true);
}
//---- ham lang nghe su kien--------------------
public void actionPerformed(ActionEvent ae)
{
try{
if(ae.getSource()==button)
{
String st = jComboBox.getSelectedItem().toString();
t.sendMessLog(st);
}
}
catch(Exception e)
{System.out.print(e);}
}
//-----ham main---------------------------------
public static void main(String arg[]) throws Exception {
URLBai3GuiClient cli= new URLBai3GuiClient();
}
}