none
VB.NET 2005連線程式如何做(不用COM元件) RRS feed

解答

所有回覆

  • 使用 System.Net.Socket 底下提供的類別就可以啦 ....
    2006年7月12日 下午 02:15
    版主
  • 有範例可以參考嗎?  我研究了一個晚上都沒什麼成果!
    2006年7月14日 上午 07:51
  • 可參考MSDN試看看~

    下列範例程式會建立與伺服器連接的用戶端。因為這個用戶端是使用同步通訊端建置,所以在伺服器傳回回應之前,用戶端應用程式的執行都會暫止。應用程式會傳送字串到伺服器,並接著在主控台中顯示伺服器所傳回的字串。

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;

    public class SynchronousSocketClient {

        public static void StartClient() {
            // Data buffer for incoming data.
            byte[] bytes = new byte[1024];

            // Connect to a remote device.
            try {
                // Establish the remote endpoint for the socket.
                // This example uses port 11000 on the local computer.
                IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName())
                IPAddress ipAddress = ipHostInfo.AddressList[0];
                IPEndPoint remoteEP = new IPEndPoint(ipAddress,11000);

                // Create a TCP/IP  socket.
                Socket sender = new Socket(AddressFamily.InterNetwork,
                    SocketType.Stream, ProtocolType.Tcp );

                // Connect the socket to the remote endpoint. Catch any errors.
                try {
                    sender.Connect(remoteEP);

                    Console.WriteLine("Socket connected to {0}",
                        sender.RemoteEndPoint.ToString());

                    // Encode the data string into a byte array.
                    byte[] msg = Encoding.ASCII.GetBytes("This is a test<EOF>");

                    // Send the data through the socket.
                    int bytesSent = sender.Send(msg);

                    // Receive the response from the remote device.
                    int bytesRec = sender.Receive(bytes);
                    Console.WriteLine("Echoed test = {0}",
                        Encoding.ASCII.GetString(bytes,0,bytesRec));

                    // Release the socket.
                    sender.Shutdown(SocketShutdown.Both);
                    sender.Close();
                   
                } catch (ArgumentNullException ane) {
                    Console.WriteLine("ArgumentNullException : {0}",ane.ToString());
                } catch (SocketException se) {
                    Console.WriteLine("SocketException : {0}",se.ToString());
                } catch (Exception e) {
                    Console.WriteLine("Unexpected exception : {0}", e.ToString());
                }

            } catch (Exception e) {
                Console.WriteLine( e.ToString());
            }
        }
       
        public static int Main(String[] args) {
            StartClient();
            return 0;
        }
    }

    2006年7月14日 上午 08:39
  • 你看過線上手冊內的使用者/伺服器端的範例嗎?

    http://msdn2.microsoft.com/zh-tw/library/w89fhyex.aspx

    2006年7月14日 上午 09:09
    版主
  • 可否請問璉璉您幾個問題

           1. 若我需要長期連線並且是多台電腦同時的

                您會建議使用同步還是非同步

           2.我有試著執行您說的範例(非同步伺服器通訊端)範例

               可是都無法達到多人同時不知您可否建議修改的方向

        謝謝您

    2006年8月14日 上午 03:31
  • 謝謝您 我大約知道問題了

    應該是 allDone 這各物件的問題

            可否請問一下 ManualResetEvent的功用

            謝謝

    2006年8月14日 上午 04:22
  • 你的長期是多久?

    一般來說,網路瞬息萬變,而且要考慮到資源的妥善運用,超過 1 小時以上的應用,就應該需要的時候再連線,不用的時候釋放出來。以 http 來說,就是需要的時候連線,網頁讀完後就立刻釋放連線。

    網路應用程式本來就會有時間差,要看你的目的、用途、容錯狀況來考量與設計。

    2006年8月14日 上午 05:37
    版主
  • 先想您說聲謝謝

        我目前是想利用tcp/ip來做同時監控數個裝置它們都是利用tcp/ip來傳資料

        我目前碰到了一些問題想請教您

        1.利用socket非同步通訊 要如何知道 client端斷訊 是否有方法可依知道

        2.若持續在ReadCallback您認為要如何來做 server端的主動斷線或關閉連線

           因為若直接對socket作 shutdown(both) 在執行close的話

           因為不知道要如何去結束ReadCallback的叫用會在endreceiver時出現問題

           我目前是加以判斷socket.connected可以解決這的問題不知是否有更好的方法

     

     

           謝謝您的幫忙

           因剛剛練習vb.net不是非常熟悉 常常麻煩您

       

    2006年8月15日 上午 06:51
  • socket.connected 只能偵測主動斷線,非雙邊程式彼此控制的斷線,只能將 timeout 視為斷線。
    2006年8月15日 上午 07:22
    版主