NwayのTCP:20890による ソケット通信にてコメントを送る仕様について
下記で送信しておりますので開発者様はxmlをパースしてください。
文字コードはUTF-8
コテハンなしの場合
テスト
コテハンありの場合
テスト2
上記のようにニコ生のコメントサーバーから送られてくるxmlに「kotehan」という要素を足しています。
注意点
コテハンがついていない場合においてコテハンをつけても 付いてない方の2度目のコメントから反映されますので注意ください。
また時期未定ですが、運営コメントを20891で受けて飛ばすことも予定してます。
飛ばす形式としてUTF-8で Const postxml As String = "{2}"
のように飛ばしてください。
下記 VB.net での20890の通信を受けるためのサンプル
Module Module1
Dim enc As System.Text.Encoding = System.Text.Encoding.UTF8
'ローカルIPアドレスでListenを開始する
Dim host As String = "localhost"
Dim port As Integer = 20890
Dim ipAdd As System.Net.IPAddress = _
System.Net.Dns.Resolve(host).AddressList(0)
Dim listener As New System.Net.Sockets.TcpListener(ipAdd, port)
Sub Main()
Dim ls As New System.Threading.Thread(AddressOf listenerstart)
ls.Start()
End Sub
Private Sub listenerstart()
listener.Start()
Try
Do
Dim tcp As System.Net.Sockets.TcpClient = _
listener.AcceptTcpClient()
'NetworkStreamを取得
Dim ns As System.Net.Sockets.NetworkStream = tcp.GetStream()
'クライアントから送られたデータを受信する
Dim ms As New System.IO.MemoryStream
Dim resBytes(256) As Byte
Dim resSize As Integer
Do
'データの一部を受信する
resSize = ns.Read(resBytes, 0, resBytes.Length)
'Readが0を返した時はクライアントが切断したと判断
If resSize = 0 Then
Console.ReadLine()
Return
End If
'受信したデータを蓄積する
ms.Write(resBytes, 0, resSize)
Loop While ns.DataAvailable
'受信したデータを文字列に変換
Dim resMsg As String = enc.GetString(ms.ToArray())
ms.Close()
Console.WriteLine(resMsg)
Loop
Catch ex As Exception
Debug.Print(ex.Message)
End Try
End Sub
End Module
C# でのサンプル
using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
static class Module1
{
static System.Text.Encoding enc = System.Text.Encoding.UTF8;
//ローカルIPアドレスでListenを開始する
static string host = "localhost";
static int port = 20890;
static System.Net.IPAddress ipAdd = System.Net.Dns.Resolve(host).AddressList[0];
static System.Net.Sockets.TcpListener listener = new System.Net.Sockets.TcpListener(ipAdd, port);
public static void Main()
{
System.Threading.Thread ls = new System.Threading.Thread(listenerstart);
ls.Start();
}
private static void listenerstart()
{
listener.Start();
try
{
do
{
System.Net.Sockets.TcpClient tcp = listener.AcceptTcpClient();
//NetworkStreamを取得
System.Net.Sockets.NetworkStream ns = tcp.GetStream();
//クライアントから送られたデータを受信する
System.IO.MemoryStream ms = new System.IO.MemoryStream();
byte[] resBytes = new byte[257];
int resSize = 0;
do
{
//データの一部を受信する
resSize = ns.Read(resBytes, 0, resBytes.Length);
//Readが0を返した時はクライアントが切断したと判断
if (resSize == 0)
{
Console.ReadLine();
return;
}
//受信したデータを蓄積する
ms.Write(resBytes, 0, resSize);
} while (ns.DataAvailable);
//受信したデータを文字列に変換
string resMsg = enc.GetString(ms.ToArray());
ms.Close();
Console.WriteLine(resMsg);
} while (true);
}
catch (Exception ex)
{
Debug.Print(ex.Message);
}
}
}