Я пытаюсь создать программу, которая связывается с локальным NodeJS с сокет-сервером C #.
Вот код, который я использую
NodeJS
const net = require('net');
class Socket {
constructor(ip, port) {
this.ip = ip;
this.port = port;
}
initClient() {
const client = new net.Socket();
client.connect(this.port, this.ip, () => {
console.log(`Connected to ${this.ip}:${this.port}`);
});
client.on("data", async data => {
console.log("Received '" + data.toString() + "'");
setTimeout(function () {
client.write("OK");
}, 3500);
});
client.on('close', () => {
console.log(`Connection closed`);
});
}
}
let socket = new Socket("HOST", 1337);
socket.initClient();
C #
Главный класс
List<String> toSendList = new List<String>();
toSendList.Add("TEST 1");
toSendList.Add("TEST 2");
toSendList.Add("TEST 3");
toSendList.Add("TEST 4");
toSendList.Add("TEST 5");
Parallel.ForEach(toSendList, new ParallelOptions { MaxDegreeOfParallelism = 5 }, delegate (string content)
{
logger.WriteLine("Result => " + socket.SendAndWaitResult(content));
});
Класс сокета сервера
public Server(int port)
{
IPEndPoint ip = new IPEndPoint(IPAddress.Any, port);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(ip);
socket.Listen(10);
client = socket.Accept();
}
public String SendAndWaitResult(String content)
{
byte[] data = new byte[1024];
data = Encoding.ASCII.GetBytes(content);
client.Send(data, data.Length, SocketFlags.None);
data = new byte[1024];
int receivedDataLength = client.Receive(data);
string response = Encoding.ASCII.GetString(data, 0, receivedDataLength);
logger.WriteLine("[DEBUG] Received : '" + response + "'");
return response;
}
И когда я запускаю обе программы,вот что я получаю
NodeJS Output
Connected to HOST:1337
Received 'TEST 1'
Received 'TEST 2TEST 3TEST 4TEST 5'
C # Output
[DEBUG] Received : 'OK'
Result => OK
[DEBUG] Received : 'OK'
Result => OK
Кто-то имеет представление опочему все сообщения после первого сжимаются в одно большое сообщение?