2012年5月10日 星期四

2012/05/10


try catch 用法    參考資料:http://blog.yslifes.com/archives/636

While迴圈         參考資料: http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/LoopWhile.htm

try裡的敍述句有可能會丟出例外資訊 ( Exception ) ,而丟出的例外資訊 ( Exception ) 型態就可以由catch來取得,做適當的處理。finally則是在try catch完成後會執行的動作,一般都是使用在關閉或則除物件等。
ps.catch取得例外需由小範圍而後大範圍,例如java.lang.NullPointException則需寫在Exception前面,因為NullPointException所能處理的範圍比Exception還小。

import java.net.*;
import java.io.*;
public class Server {
   public final static int myPort=20; // 使用port 20
   public static void main(String args[]) {
      ServerSocket ss;
      Socket sc;
      PrintWriter op;
try {
  ss = new ServerSocket(myPort);
  try {
    while (true) {
sc = ss.accept(); // 等待建立連線
op = new PrintWriter(sc.getOutputStream());
op.println("Hi! There!");
op.flush(); // 很重要, 不要漏掉
sc.close();
}
  }
  catch (IOException e) {
ss.close();
System.err.println(e);
}
}
catch (IOException e) {
System.err.println(e);
}
}
}










一台server兩台client







2012年4月5日 星期四

2012年3月29日 星期四

03/29

JAVA的server-client




JAVA server連接VBclient
















winsock狀態:
Closed = 0  bind參數關閉
Open = 1  打開
Listening = 2 偵聽
ConnectionPending = 3  連結掛起
ResolvingHost = 4 識別主機。
HostResolved = 5 已識別主機
Connecting = 6 正在連結。
Connected = 7 已連結。
Closing = 8 同級人員正在關閉連結。
Error = 9 錯誤








2012年3月15日 星期四

03/15

程式設計工藝大師許志宇老師:http://tccnchsu.blogspot.com/ 

TCP和UDP的差異
在 TCP/ IP 協定家族中﹐傳送層主要有兩個協定﹕TCP 與 UDP。究竟兩者有何不同呢﹖簡單而言﹐TCP 提供的是一個連線導向(Connection Oriented)的可靠傳輸﹐前面所介紹的傳送層檢測手續﹐都會在 TCP 中得到實現。相對而言﹐UDP 則是一個非連線型(Connectionless)的非可靠傳輸協定﹐它並不會運用確認機制來保證資料是否正確的被接收、不需要重傳遺失的資料、資料的接收可不必按順序進行、也不提供回傳機制來控制資料流的速度。因此﹐ UDP 信息可能會在網路傳送過程中丟失﹑重複﹑或不依順序﹐而且抵達速度也可能比接收端的處理速度還快。對於某些訊息量較大、時效性大於可靠性的傳輸來說(比方說語音 / 影像),UDP 的確是個不錯的選擇。
(資料來源:http://www.pcnet.idv.tw/pcnet/network/network_ip_tcp.htm)


TCPUDP的程式差異:
socket()參數不同
UDP Server不需要使用listenaccept
UDP收發資料用sendto/recvfrom
TCPaddress messageconnect/accept時決定
UDP:在每次的sendto/recvfrom函式中取得address message
UDPshutdown無效

(資料來源:http://blog.yam.com/ibma92157/article/27580746)



========================================================================client


Private Sub cmdConnect_Click()
  Winsock1.LocalPort = 6666   '以便自動產生Local Port
  Winsock1.Connect "192.168.x.x"  '設定改成您 Server 電腦的IP 號碼
End Sub

Private Sub cmdExit_Click()
  Winsock1.SendData "close"
  DoEvents
  Winsock1.Close
  Winsock1.LocalPort = 0
End Sub

Private Sub cmdSend_Click()
  Winsock1.SendData txtOutput.Text
  DoEvents
End Sub

Private Sub Form_Load()
  Winsock1.RemotePort = 7777  '設定與Server端做Listen的Port相同
End Sub

Private Sub Form_Unload(Cancel As Integer)
If Winsock1.State <> sckClosed Then
   cmdExit_Click
End If
End Sub

Private Sub Winsock1_Connect()
If Winsock1.State = sckConnected Then
   lstInput.AddItem "Connected! LocalPort =" & Winsock1.LocalPort _
                    & " RemptePort = " & Winsock1.RemotePort
End If

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  Dim mydata As String
  Winsock1.GetData mydata, vbString
  lstInput.AddItem mydata
End Sub

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
  lstInput.AddItem Description
End Sub
========================================================================
server



Private Sub cmdSend_Click()
  Winsock1.SendData txtSend.Text
End Sub

Private Sub Form_Load()
  Winsock1.LocalPort = 7777
  Winsock1.Listen  '監聽
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  Dim strData As String
  Winsock1.GetData strData, vbString
  txtReceived.Text = strData
  If strData = "close" Then
    Winsock1.Close
    cmdSend.Enabled = False
    Winsock1.Listen
  End If
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
MsgBox "有人敲門"
  Winsock1.Close
  Winsock1.Accept requestID  '改成接受
  cmdSend.Enabled = True
End Sub




=======================================================================




2012年3月1日 星期四

101/3/1

物件 object
類別 class
屬性 property
名詞 cation
事件 event
行為 behavior
方法 method


***********************************************
程式碼:


import javax.swing.*;
import java.awt.event.*;  // 要處理事件必須 import 此套件
public class Exe extends JFrame
implements ActionListener {

    /**

     * @param args
     */
    //int act = 0;     // 用來記錄按鈕被次數的變數
    int SizeW = 1000;
    int SizeH = 1570;
    public static void main(String[] args) {
    Exe test = new Exe();

      }
      // 用建構方法來建立元件、將元件加入視窗、顯示視窗
      public Exe() {
      setTitle("shjhu");    // 設定視窗標題
      JButton mybutton = new JButton("修");
      JButton mybutton1 = new JButton("shjhu");
      JCheckBox mybutton2 = new JCheckBox("111111");
      JRadioButton mybutton3 = new JRadioButton("22222");
                   
                   
         
         
     
     
      mybutton.setSize(100, 150);
      mybutton1.setSize(300, 250);
      mybutton2.setSize(500, 750);
      mybutton3.setSize(500, 750);
        mybutton.addActionListener(this);
        getContentPane().add(mybutton);
        getContentPane().add(mybutton1);
        getContentPane().add(mybutton2);
        getContentPane().add(mybutton3);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
        setSize(SizeW,SizeH);
        setVisible(true);
      }
      public void actionPerformed(ActionEvent e) {
          SizeW = SizeW * 2;
          SizeH = SizeH * 2;
          setSize(SizeW,SizeH);
      }

}
*********************************************************************