public void startStop(String title, ProtocolKind protocolKind) { var bindIp = new Ip(IpKind.V4Localhost); const int port = 8881; const int listenMax = 10; Ssl ssl= null; var sockServer = new SockServer(new Kernel(),protocolKind,ssl); Assert.That(sockServer.SockState, Is.EqualTo(SockState.Idle)); ThreadStart action = () => { if (protocolKind == ProtocolKind.Tcp){ sockServer.Bind(bindIp, port, listenMax); } else{ sockServer.Bind(bindIp, port); } }; var _t = new Thread(action) { IsBackground = true }; _t.Start(); while (sockServer.SockState == SockState.Idle){ Thread.Sleep(100); } Assert.That(sockServer.SockState, Is.EqualTo(SockState.Bind)); sockServer.Close(); //bind()にThreadBaseのポインタを送っていないため、isLifeでブレイクできないので、selectで例外を発生させて終了する Assert.That(sockServer.SockState, Is.EqualTo(SockState.Error)); }
public void getLocalAddress(String title, ProtocolKind protocolKind) { var bindIp = new Ip(IpKind.V4Localhost); const int port = 9991; const int listenMax = 10; Ssl ssl = null; var sockServer = new SockServer(new Kernel(),protocolKind,ssl); ThreadStart action = () =>{ if (protocolKind == ProtocolKind.Tcp){ sockServer.Bind(bindIp, port, listenMax); }else{ sockServer.Bind(bindIp, port); }}; var _t = new Thread(action) { IsBackground = true }; _t.Start(); while (sockServer.SockState == SockState.Idle){ Thread.Sleep(200); } var localAddress = sockServer.LocalAddress; Assert.That(localAddress.ToString(), Is.EqualTo("127.0.0.1:9991")); //bind()後 localAddressの取得が可能になる var remoteAddress = sockServer.RemoteAddress; Assert.IsNull(remoteAddress); //SockServerでは、remoteAddressは常にnullになる sockServer.Close(); }
//指定したアドレス・ポートで待ち受けて、接続されたら、そのソケットを返す //失敗した時nullが返る //Ver5.9.2 Java fix //public static SockTcp CreateConnection(Kernel kernel,Ip ip, int port,ILife iLife){ public static SockTcp CreateConnection(Kernel kernel, Ip ip, int port, Ssl ssl, ILife iLife) { //Ver5.9.2 Java fix //var sockServer = new SockServer(kernel,ProtocolKind.Tcp); var sockServer = new SockServer(kernel, ProtocolKind.Tcp, ssl); if (sockServer.SockState != SockState.Error) { const int listenMax = 1; if (sockServer.Bind(ip, port, listenMax)) { while (iLife.IsLife()) { var child = (SockTcp)sockServer.Select(iLife); if (child == null) { break; } sockServer.Close(); //これ大丈夫? return(child); } } } sockServer.Close(); return(null); }
//bindが可能かどうかの確認 public static bool IsAvailable(Kernel kernel,Ip ip, int port) { var sockServer = new SockServer(kernel,ProtocolKind.Tcp, null); if (sockServer.SockState != SockState.Error){ const int listenMax = 1; if (sockServer.Bind(ip, port, listenMax)){ sockServer.Close(); return true; } } sockServer.Close(); return false; }
//bindが可能かどうかの確認 public static bool IsAvailable(Kernel kernel, Ip ip, int port) { var sockServer = new SockServer(kernel, ProtocolKind.Tcp, null); if (sockServer.SockState != SockState.Error) { const int listenMax = 1; if (sockServer.Bind(ip, port, listenMax)) { sockServer.Close(); return(true); } } sockServer.Close(); return(false); }
//指定したアドレス・ポートで待ち受けて、接続されたら、そのソケットを返す //失敗した時nullが返る //Ver5.9.2 Java fix //public static SockTcp CreateConnection(Kernel kernel,Ip ip, int port,ILife iLife){ public static SockTcp CreateConnection(Kernel kernel,Ip ip, int port, Ssl ssl,ILife iLife) { //Ver5.9.2 Java fix //var sockServer = new SockServer(kernel,ProtocolKind.Tcp); var sockServer = new SockServer(kernel, ProtocolKind.Tcp,ssl); if (sockServer.SockState != SockState.Error) { const int listenMax = 1; if (sockServer.Bind(ip, port, listenMax)){ while (iLife.IsLife()){ var child = (SockTcp) sockServer.Select(iLife); if (child == null){ break; } sockServer.Close(); //これ大丈夫? return child; } } } sockServer.Close(); return null; }