🎃

お手軽ソケット通信 (C++, C#, Python)

2023/03/06に公開約1,400字

どどーん

https://github.com/husty530/socket-template
内容物はTCP/UDP Server/Client です。

解説

「お手軽」の定義は次の3つです。

  • 外部ライブラリに依存しない。
  • プラットフォームに依存しない。
  • 1ファイルで完結。

使い方はサンプルコードに目を通していただければわかるかと思いますが,何も書かないのもアレなので,ざっくりとだけプレビューを示します。
TCPのPython -> C++, C#のつもりで書いています。マネっこでServer/Clientを逆にしたりエコーにしたり,UDPにしたりするのは簡単です。

サンプルコード

  • C++
#include "sock.h"

int main()
{
  auto sock = TcpSocket::create_client(3000);
  std::string msg = "";
  while (true)
  {
    if (sock.try_read_line(msg)) std::cout << msg << std::endl;
    sleep_msec(1000);
  }
}
  • C#
using Husty.Communication;

var type = "TCPClient";
var port = 3000;
using IDataTransporter stream = type.ToLower() switch
{
  "tcpserver"         => new TcpSocketServer(port).GetStream().Value,
  "tcpclient"         => new TcpSocketClient("127.0.0.1", port).GetStream().Value,
  "udplistener"       => new UdpDataTransporter().SetListeningPort(port),
  "udpcaller"         => new UdpDataTransporter().SetTargetPorts(port),
  "websocketserver"   => WebSocketDataTransporter.CreateServerAsync("127.0.0.1", port).Result,
  "websocketclient"   => WebSocketDataTransporter.CreateClientAsync("127.0.0.1", port).Result,
  _                   => throw new NotSupportedException()
};

while (stream.ReadLine() is string msg) Console.WriteLine(msg);
Console.WriteLine("completed.");
  • Python
import time
from sock import *

sock = TcpSocket.create_server(3000)
while True:
  sock.write_line("Hello")
  time.sleep(1)

Discussion

ログインするとコメントできます