mono socket UT

// System.Net.Sockets.SocketTest.cs
//
// Authors:
//    Brad Fitzpatrick (brad@danga.com)
//    Gonzalo Paniagua Javier (gonzalo@novell.com)
//
// (C) Copyright 2003 Brad Fitzpatrick
// Copyright (c) 2005 Novell, Inc. (http://www.novell.com)
//

using System;
using System.Collections;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using NUnit.Framework;

namespace MonoTests.System.Net.Sockets
{
 [TestFixture]
 public class SocketTest
 {
  // note: also used in SocketCas tests
  public const string BogusAddress = "192.168.244.244";
  public const int BogusPort = 23483;

  [Test]
  public void ConnectIPAddressAny ()
  {
   IPEndPoint ep = new IPEndPoint (IPAddress.Any, 0);

   try {
    using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
     s.Connect (ep);
     s.Close ();
    }
    Assert.Fail ("#1");
   } catch (SocketException ex) {
    Assert.AreEqual (10049, ex.ErrorCode, "#2");
   }

   try {
    using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
     s.Connect (ep);
     s.Close ();
    }
    Assert.Fail ("#3");
   } catch (SocketException ex) {
    Assert.AreEqual (10049, ex.ErrorCode, "#4");
   }
  }

  [Test]
  [Ignore ("Bug #75158")]
  public void IncompatibleAddress ()
  {
   IPEndPoint epIPv6 = new IPEndPoint (IPAddress.IPv6Any,
        0);

   try {
    using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP)) {
     s.Connect (epIPv6);
     s.Close ();
    }
    Assert.Fail ("#1");
   } catch (SocketException ex) {
#if !NET_2_0
    // invalid argument
    int expectedError = 10022;
#else
    // address incompatible with protocol
    int expectedError = 10047;
#endif
    Assert.AreEqual (expectedError, ex.ErrorCode,
      "#2");
   }
  }

  [Test]
  [Category ("InetAccess")]
  public void EndConnect ()
  {
      IPAddress ipOne = IPAddress.Parse (BogusAddress);
      IPEndPoint ipEP = new IPEndPoint (ipOne, BogusPort);
      Socket sock = new Socket (ipEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
      IAsyncResult ar = sock.BeginConnect (ipEP, null, null);
      bool gotException = false;

      try {
   sock.EndConnect (ar);  // should raise an exception because connect was bogus
      } catch {
   gotException = true;
      }

      Assertion.AssertEquals ("A01", gotException, true);
  }

  [Test]
  [ExpectedException (typeof (ArgumentNullException))]
  public void SelectEmpty ()
  {
   ArrayList list = new ArrayList ();
   Socket.Select (list, list, list, 1000);
  }
  
  private bool BlockingConnect (bool block)
  {
   IPEndPoint ep = new IPEndPoint(IPAddress.Loopback, 1234);
   Socket server = new Socket(AddressFamily.InterNetwork,
         SocketType.Stream,
         ProtocolType.Tcp);
   server.Bind(ep);
   server.Blocking=block;

   server.Listen(0);

   Socket conn = new Socket (AddressFamily.InterNetwork,
        SocketType.Stream,
        ProtocolType.Tcp);
   conn.Connect (ep);

   Socket client = server.Accept();
   bool client_block = client.Blocking;

   client.Close();
   conn.Close();
   server.Close();
   
   return(client_block);
  }

  [Test]
  public void AcceptBlockingStatus()
  {
   bool block;

   block = BlockingConnect(true);
   Assertion.AssertEquals ("BlockingStatus01",
      block, true);

   block = BlockingConnect(false);
   Assertion.AssertEquals ("BlockingStatus02",
      block, false);
  }

  [Test]
#if !NET_2_0
  [ExpectedException (typeof (ArgumentException))]
#endif
  public void SetSocketOptionBoolean ()
  {
   IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 1);
   Socket sock = new Socket (ep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
   try {
    sock.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
   } finally {
    sock.Close ();
   }
  }

  [Test]
  public void TestSelect1 ()
  {
   Socket srv = CreateServer ();
   ClientSocket clnt = new ClientSocket (srv.LocalEndPoint);
   Thread th = new Thread (new ThreadStart (clnt.ConnectSleepClose));
   Socket acc = null;
   try {
    th.Start ();
    acc = srv.Accept ();
    clnt.Write ();
    ArrayList list = new ArrayList ();
    ArrayList empty = new ArrayList ();
    list.Add (acc);
    Socket.Select (list, empty, empty, 100);
    Assertion.AssertEquals ("#01", 0, empty.Count);
    Assertion.AssertEquals ("#02", 1, list.Count);
    Socket.Select (empty, list, empty, 100);
    Assertion.AssertEquals ("#03", 0, empty.Count);
    Assertion.AssertEquals ("#04", 1, list.Count);
    Socket.Select (list, empty, empty, -1);
    Assertion.AssertEquals ("#05", 0, empty.Count);
    Assertion.AssertEquals ("#06", 1, list.Count);
   } finally {
    if (acc != null)
     acc.Close ();
    srv.Close ();
   }
  }

  static Socket CreateServer ()
  {
   Socket sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
   sock.Bind (new IPEndPoint (IPAddress.Loopback, 0));
   sock.Listen (1);
   return sock;
  }

  class ClientSocket {
   Socket sock;
   EndPoint ep;

   public ClientSocket (EndPoint ep)
   {
    this.ep = ep;
    sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
   }

   public void ConnectSleepClose ()
   {
    sock.Connect (ep);
    Thread.Sleep (2000);
    sock.Close ();
   }

   public void Write ()
   {
    byte [] b = new byte [10];
    sock.Send (b);
   }
  }

  byte[] buf = new byte[100];

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed1 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
   s.Close();

   s.ReceiveFrom (buf, ref ep);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed2 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   s.Close();

   s.Blocking = true;
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed3 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   s.Close();

   s.GetSocketOption (0, 0);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed4 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   s.Close();

   s.GetSocketOption (0, 0, null);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed5 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   s.Close();

   s.GetSocketOption (0, 0, 0);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed6 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   s.Close();

   s.Listen (5);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed7 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   s.Close();

   s.Poll (100, 0);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed8 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   s.Close();

   s.Receive (buf);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed9 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   s.Close();

   s.Receive (buf, 0);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed10 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   s.Close();

   s.Receive (buf, 10, 0);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed11 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
   s.Close();

   s.Receive (buf, 0, 10, 0);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed12 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
   s.Close();

   s.ReceiveFrom (buf, 0, ref ep);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed13 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
   s.Close();

   s.ReceiveFrom (buf, 10, 0, ref ep);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed14 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
   s.Close();

   s.ReceiveFrom (buf, 0, 10, 0, ref ep);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed15 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   s.Close();

   s.Send (buf);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed16 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   s.Close();

   s.Send (buf, 0);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed17 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   s.Close();

   s.Send (buf, 10, 0);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed18 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
   s.Close();

   s.Send (buf, 0, 10, 0);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed19 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
   s.Close();

   s.SendTo (buf, 0, ep);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed20 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
   s.Close();

   s.SendTo (buf, 10, 0, ep);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed21 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
   s.Close();

   s.SendTo (buf, 0, 10, 0, ep);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed22 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
   s.Close();

   s.SendTo (buf, ep);
  }

  [Test]
  [ExpectedException (typeof (ObjectDisposedException))]
  public void Disposed23 ()
  {
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
   s.Close();

   s.Shutdown (0);
  }
 }
}

 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1。这个都是自己慢慢摸索的。mono for andriod ,资料真的太少了。 2.正在做安卓手机的项目。选择这条路都不知道能不能坚持下去。 3.希望有同样迷惑的人,照亮一点前面的路,也希望能照亮自己。 4.下面的代码运行环境 VS2012 + mono for andriod 4.8 java -sdk 与 mono for andriod 4.8 见下面的网盘 希望到时,这个网盘没有被封。 http://pan.baidu.com/s/1sjqMsqT 安装教程 http://www.51mono.com/article/show/172 http://www.51mono.com/article/show/96 安卓模拟器,推荐使用 Genymotion。 具体的安装教程,就请网上找吧。我实在没有力气了。 不过在模拟时,还是有点不够爽。 由于是 mono for andriod 专业破解版,所以可以直接使用 真机运行的。 我就是用 小米3 来运行。问题比较少。 另外要吐槽一下的是,开发这个手机APP,真的很耗内存。为此我不得不把我的老爷机换了4G的内存条。 由于是老爷机,内存条好贵的呀。 5,windows 开发环境 是 win8.1. 32位。 6.希望我啰嗦的这么多信息对你有用。 7.下面是正题了。 这个压缩包中,包含 C#写的服务端。 和 mono for andriod ---c# 写的手机客户端。 实现简单的 Socket --TCP/IP 通信。 其实,使用的类 和语法代码与 普通PC机的一样。但 手机客户端,还是有点点区别。 在pc客户端中,使用线程收取 信息,然后打印到UI控件上,是使用委托进行。 在手机APP中,有一个专门的方法来把这个信息寄送到 UI线程,然后在 UI控件上进行显示。 在例子中,有体现。 8.好了,就这么多了

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值