*

[Unity]コードリファレンス ソケット通信の開始して接続して切断する。

公開日: : C#, Unity, ソース

オンラインゲームを作るためにはソケット通信が必要です。
今回はいきなりソースから。解説は下の方に。
この内容だけだとUnityでなく、C#.NETな気がします。

using System.Net;
using System.Net.Sockets;
/* 省略 */
public class SocketTest : MonoBehaviour{
	public void StartConnectEndSocket(){
		Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
		host.Bind(new IPEndPoint(IPAddress.Any, 49152));
		host.Listen(1);

		if(host.Poll(0, SelectMode.SelectRead)){
			Socket client = host.Accept();
		}

		if(host.Connected){
			host.Shutdown(SocketShutdown.Both);
		}
		host.Close();
	}
}

このサンプルメソッド自体は開始して、接続をして、すぐに終了していますので、実行しても意味がないものになっています。

Socketクラス

ソケット通信のためのクラスです。
イメージとしては2つのクライアントがいるとすれば、それぞれがソケットを持ちます。
送りたいデータが発生した場合に、それぞれのソケットに対し送信を行い、またそれぞれのソケットが受信を行います。

ソケット通信の開始

ソケット通信を開始するときはコンストラクタを呼び出し、利用するIPアドレス、ポートを設定し、開始を行います。

ソケット通信を開始し、各種設定する(TCP)

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

/* 省略 */

// コンストラクタ
Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

// IPアドレスとポートの指定
host.Bind(new IPEndPoint(IPAddress.Any, 49152));

// 開始
host.Listen(1);

TCPで通信を開始する場合は上記のようになります。
ポート番号は49152~65535までの任意のポートです。
Listen(1)の引数は一時的な接続待ちのキューです。
要するに同時に接続しようとすると上限一人までが待ち状態になれます。

ソケット通信の接続

ソケット通信で接続を受け付ける場合はAcceptというメソッドがありますが、このConnectというメソッドはブロッキングを行います。
ブロッキングは、プログラムが停止し、外からのアクションを待ち受ける状態になる、というものです。
実際のプログラムでは停止してしまうと何も操作が出来なくなってしまうため、接続要求が来たかを確認してから接続を行います。

接続要求を確認し、接続する

/* 接続部分省略 */

if(host.Poll(0, SelectMode.SelectRead)){
	Socket client = host.Accept();
}

切断

よくあるCloseですが、接続している場合はShutdownで切断してから終了します。
SocketShutdown.Bothをパラメータとすると、送信・受信の双方が切断されます。
もちろんそれぞれSocketShutdown.Send,SocketShutdown.Recieveという列挙体が用意されています。

切断してから終了する

if(host.Connected){
	host.Shutdown(SocketShutdown.Both);
}
host.Close();

ad

関連記事

unity socket

[Unity]Socket通信でP2Pすっぞ 接続待ち受け

P2Pしましょ。 まずはサーバーとして待ちうけまで作ります。 UnityだとNAT越えどうす

記事を読む

visualstudio_

[visual studio]ODBC等のConnection Stringの簡単な作り方

Connection Stringって大体いつも検索して、それを使ってみて、だめだったりOKだったり

記事を読む

logo

[C#, Generic]UnityのAddComponentとかなんとかComponentを実装してみる

UnityのAddComponentってありますよね。 みたいなやつ。 このジェネリクスの

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 直線で3つ同色のパズルを消去する ソース解説

◆全文 using UnityEngine; using System.Collection

記事を読む

Unity1_5

[Unity]Unity2Dで3マッチパズルを作ろう~インストール編~

Unityの2D機能で3マッチパズルでも作ろうかと思ったのですが、ほとんど資料がない。Unity

記事を読む

wannabenote

[Excel, C#]C#でExcelの値の変更イベントを取得する。

Excelのイベント取得 処理の流れ 対象のワークシートを取得する。 イベントハンドラ

記事を読む

Wannabenote

[Unity]Unity4.6 UIチュートリアル Lesson7.UI Slider 日本語要約

Unityまとめページはこちら。 前回の続き。 今回はスライダーコントロールについてです

記事を読む

logo

[Unity]GameObject.Findは遅い

遅いらしいです。 なので、マネージャークラスを作りましょう、というのが風潮らしいです。 マネージ

記事を読む

Unity_

[Unity]Unity2Dチュートリアル 同じ色で繋がったパズルを消去する

前回の続き。 前回で横に同じ色がある場合は消去できるようになりました。 テトリスとぷよぷよを足し

記事を読む

logo

[C#]文字列のプロパティを初期化したい。空文字で初期化したい。

Twitterで適当に叫んでたときのネタをメモ。 C#でプロパティの初期化が面倒です。 たと

記事を読む

ad

Message

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

ad

  •  Auther;わなび

     「オープン系得意だよね? 俺のPCの調子悪いんだけど」という無茶振りから解き放たれゲームエンジニアに。
    C#とかUnityを扱います。
    Twitterフォロー大歓迎です。
    githubアカウント→wannabenote
  • follow us in feedly
PAGE TOP ↑