2012年5月10日 星期四

java 5/10

SERVER 程式碼

import java.net.*;
import java.io.*;
public class SimpleServer {
   public final static int myPort=20; // 使用port 20
   public static void main(String args[]) {
      //ServerSocket ss;
      //Socket sc;
      PrintWriter op;

  try {

         ServerSocket ss= new ServerSocket(myPort);
while (true) {
Socket sc = ss.accept(); // 等待建立連線
                op = new PrintWriter(sc.getOutputStream());
       op.println("Hi! There!");
                op.flush(); // 很重要, 不要漏掉
                sc.close();

}
}
  catch (IOException e) {
System.err.println(e);
}
     System.out.println("end");
/*

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);
}

*/
}
}




client 程式碼


import java.net.*;
import java.io.*;

// Chapter 6, Listing 1
public class clinet {
  public static final int SERVICE_PORT = 20;

  public static void main(String args[]) {
    // Check for hostname parameter
    if (args.length != 1) {
      System.out.println ("Syntax - DaytimeClient host");
      return;
    }

    // Get the hostname of server
    String hostname = args[0];

    try {
      // Get a socket to the daytime service
      Socket daytime = new Socket (hostname, SERVICE_PORT);

      System.out.println ("Connection established");

      // Set the socket option just in case server stalls
      daytime.setSoTimeout ( 2000 );

      // Read from the server
      BufferedReader reader = new BufferedReader (
      new InputStreamReader(daytime.getInputStream()));

      System.out.println ("Results : " + reader.readLine());

      // Close the connection
      daytime.close();
    } catch (IOException ioe) {
      System.err.println ("Error " + ioe);
    }
  }
}



各一個 SERVER
            CLIENT   對連\




一個SERVER 兩個CLIENT

2012年4月26日 星期四

JAVA執行



從JAVA找自身 IP 跟電腦名稱




程式碼


import java.net.*;

public class TestInet1 {
  public static void main(String argv[])
  {
    try {
      InetAddress myip = InetAddress.getLocalHost();

      System.out.println(myip.getHostName());
      System.out.println(myip.getHostAddress());
    } catch (UnknownHostException e) {
      System.out.println("Error: unable to resolve localhost");
    }
  }
}

2012年4月5日 星期四

04/05 兩個 Clinet透過Server互傳

參考網址 



實現畫面



SERVER 端需用三個Winsock 其中一個用來監聽
剩於兩個則分別配給Clinet  


Winsock需設成類似陣列的方式


SERVER 端程式碼

Option Explicit

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

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

Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
  Dim strData As String
  Winsock1(1).GetData strData, vbString
  txtReceived.Text = strData
  Winsock1(2).GetData strData, vbString
  Text1.Text = strData
  
  If Index = 1 Then
  Winsock1(2).SendData txtReceived.Text
  Else
  Winsock1(1).SendData Text1.Text
  
End If
End Sub

Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
  Dim i As Long
  For i = 1 To 2
If Winsock1(i).State = sckClosed Then
Winsock1(i).Accept requestID
List1.AddItem "Local Port=" + Str(Winsock1(i).LocalPort) + "RemotePort = " + Str(Winsock1(i).RemotePort)
Exit For
End If
Next
  'Winsock1.Close
  'Winsock1.Accept requestID  '改成接受
  cmdSend.Enabled = True
End Sub


紅色部分為實現的重點 

Clinet端 


跟之前的沒什麼不一樣



Private Sub cmdConnect_Click()
  Winsock1.LocalPort = 0   '以便自動產生Local Port
  Winsock1.Connect "125.230.89.95"  '設定改成您 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





2012年3月29日 星期四

03/29

 參考網址:程式工藝大師


Winsock1 狀態改變

'winsock 狀態常數
'sckClosed 0 關閉狀態
'sckOpen 1 打開狀態
'sckListening 2 偵聽狀態
'sckConnectionPending 3 連接掛起
'sckResolvingHost 4 解析域名
'sckHostResolved 5 已識別主機
'sckConnecting 6 正在連接
'sckConnected 7 已連接
'sckClosing 8 正在關閉連接
'sckError 9 錯誤



'sckClosed 0 關閉狀態  還沒開啟



'sckOpen 1 打開狀態


'sckListening 2 偵聽狀態  監聽是否有用戶連線


'sckConnecting 6 正在連接


 CLINET  'sckConnected 7 已連接


SERVER sckConnected 7 已連接


'sckClosed 0 關閉狀態



程式碼 
server 

Option Explicit

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

Private Sub Command1_Click()


Label2.Caption = Winsock1.State

End Sub

Private Sub Command2_Click()
Winsock1.Bind 7777, Winsock1.LocalIP
Label3.Caption = Winsock1.State

End Sub

Private Sub Command3_Click()
Winsock1.Listen
Label4.Caption = Winsock1.State
End Sub

Private Sub Command4_Click()
  Label5.Caption = Winsock1.State
End Sub

Private Sub Command5_Click()
Winsock1.Close

  Label6.Caption = Winsock1.State


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)
  Winsock1.Close
  Winsock1.Accept requestID  '改成接受
  cmdSend.Enabled = True
End Sub


clinet


Private Sub cmdConnect_Click()
  Winsock1.LocalPort = 0   '以便自動產生Local Port
  Winsock1.Connect "192.168.15.43"  '設定改成您 Server 電腦的IP 號碼
  Label1.Caption = Winsock1.State

End Sub

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

Private Sub cmdSend_Click()
  Winsock1.SendData txtOutput.Text
  DoEvents
  Label2.Caption = Winsock1.State
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


JAVA連接VB

使用JAVA 的SERVER 連線到 VB的 CLINET



JAVA  SERVER 程式碼









2012年3月15日 星期四

3/16



參考網頁







TCP 和 UDP 差異

                   
                    優點                                        缺點

TCP         傳送可靠,                             速度較慢  
             程式可省略可靠機制

UDP     傳輸量大且迅速                     資料傳輸不可靠,沒有可靠機制
                資料可能會遺失







Example


TCP Server

Option Explicit

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


TCP Cleint



Private Sub cmdConnect_Click()
  Winsock1.LocalPort = 6666   '以便自動產生Local Port
  Winsock1.Connect "192.168.15.53"  '設定改成您 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

只需要在紅色地方 更改
Local Port  不能跟目的的Port一樣










2012年3月2日 星期五

101/03/03

UDP   自己主機 對傳

IP設成自己的



Option Explicit

Private Sub Form_Load()
  With udpPeerA
    '重要:必須將 RemoteHost 的值
    '修改為電腦的名稱或IP位址。
    .Protocol = sckUDPProtocol
    .RemoteHost = "163.25.4.0"
    .RemotePort = 2001   '連線的連接埠號。
    .Bind 2002        '連結到本機的連接埠。
  End With
  frmPeerB.Show         '顯示第二個表單。
End Sub

Private Sub txtSend_Change()
  '在鍵入文字時,立即將其傳送出去。
  udpPeerA.SendData txtSend.Text
End Sub

Private Sub udpPeerA_DataArrival _
(ByVal bytesTotal As Long)
  Dim strData As String
  udpPeerA.GetData strData
  txtOutput.Text = strData
End Sub




UDP  兩台電腦對傳

需要 兩台主機  IP






Private Sub cmdConnect_Click()
   With udpPeerA
    .RemoteHost = txtHostName.Text
    If chkMain.Value Then
      .RemotePort = 1001   '連線的連接埠號。
      .Bind 1002        '連結到本機的連接埠。
    Else
      .RemotePort = 1002
      .Bind 1001
    End If
  End With
End Sub

Private Sub cmdSend_Click()
  udpPeerA.SendData txtSend.Text
  DoEvents
End Sub

Private Sub udpPeerA_DataArrival(ByVal bytesTotal As Long)
  Dim strData As String
  udpPeerA.GetData strData
  txtOutput.Text = strData
End Sub







2012年3月1日 星期四

101/03/01



物件       Object    
類別       Class
屬性       Property
事件       Event
行為       Behavior
方法       Method



物件      名詞
Form1.caption     屬性
              動詞
Form1.Hide        行為



import javax.swing.*;
import java.awt.event.*;  // 要處理事件必須 import 此套件

public class Exe extends JFrame 
implements ActionListener {

/**
* @param args
*/
//int act = 0;     // 用來記錄按鈕被次數的變數
int SizeW = 500;
int SizeH = 700;

 public static void main(String[] args) {
 Exe test = new Exe();
 }

 // 用建構方法來建立元件、將元件加入視窗、顯示視窗
 public Exe() {
   setTitle("CHEN JAHO YU");    // 設定視窗標題
   JButton mybutton = new JButton("陳昭宇");
   JButton mybutton1 = new JButton("資通");
   JCheckBox night_box = new JCheckBox("9730030");
   JRadioButton jrbAlphabets = new JRadioButton("12345");
   
   mybutton.setSize(100,50);
   night_box.setSize(100,50);
   jrbAlphabets.setSize(100, 50);

   // 通知按鈕物件:本物件要當傾聽者
   mybutton.addActionListener(this);
   getContentPane().add(mybutton);
   getContentPane().add(mybutton1);
   getContentPane().add(night_box);
   getContentPane().add(jrbAlphabets);
   
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   setSize(SizeW,SizeH);
   setVisible(true);
 }
 public void actionPerformed(ActionEvent e) {
 SizeW = SizeW * 2;
 SizeH = SizeH * 2;  
 setSize(SizeW,SizeH);
 }

}