Created
February 7, 2017 04:42
-
-
Save AonaSuzutsuki/d1653a7aedc8d540f97b3f4890306497 to your computer and use it in GitHub Desktop.
Simple telnet client code for 7Days to Die.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Net.Sockets; | |
using System.Threading.Tasks; | |
namespace _7dtd_Test | |
{ | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
// ソケットをTCPプロトコルで生成 | |
// AddressFamily.InterNetwork: IPv4で接続(IPv6の場合はInterNetworkV6) | |
// SocketType.Stream: TCPを使うので双方向のバイトストリームをサポートするStream | |
// ProtocolType.Tcp: TCPなのでTcp | |
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); | |
// ローカルホストの8081ポートのサーバへ接続 | |
socket.Connect("127.0.0.1", 8081); | |
bool endRead = false; // 読み込み用スレッドの停止用 | |
// ログ読み取り用スレッド | |
Task tasks = Task.Factory.StartNew(() => | |
{ | |
while (!endRead) | |
{ | |
if (socket.Available > 0) | |
{ | |
byte[] recBytes = new byte[socket.ReceiveBufferSize]; | |
// 受信データの取得 | |
socket.Receive(recBytes, SocketFlags.None); | |
// 受信データを文字列に変換 | |
string recStr = System.Text.Encoding.UTF8.GetString(recBytes).TrimEnd('\0'); | |
// 受信文字列データを出力 | |
if (!string.IsNullOrEmpty(recStr)) | |
{ | |
Console.Write(recStr); | |
Console.Write("> "); | |
} | |
} | |
// 速すぎるとCPUをバカ食いするので | |
System.Threading.Thread.Sleep(100); | |
} | |
}); | |
// 改行コード | |
byte[] newLine = { 0x0D, 0x0A }; | |
while (true) | |
{ | |
// 文字入力を受ける | |
string inputStr = Console.ReadLine(); | |
// exitの時は読み取りスレッド停止とループから抜ける | |
if (inputStr.Equals("exit")) | |
{ | |
endRead = true; | |
break; | |
} | |
// 入力文字を送信 | |
byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(inputStr); | |
socket.Send(inputBytes, inputBytes.Length, SocketFlags.None); | |
// 改行コードを送信 | |
socket.Send(newLine, newLine.Length, SocketFlags.None); | |
} | |
// 受信スレッドを待機 | |
tasks.Wait(); | |
// 接続終了処理 | |
socket.Shutdown(SocketShutdown.Both); | |
socket.Disconnect(false); | |
socket.Dispose(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment