无法从 C# 客户端的套接字服务器获得响应。调用之后Receive,即使我超过了要读取的字符数,也会发生锁定并且不会被删除。
在 php 中有一个类似的代码,它可以工作并接收响应。答案是以换行符结尾的任意字符串。在 php 中,为此您需要在socket_read函数中指定第三个参数PHP_NORMAL_READ。
是否可以在 C# 中设置要释放的锁并在响应行到达换行符时输出接收到的响应?
还是我只是在某个地方错了?
这是 C# 中的客户端应用程序
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleSocketClient
{
class Program
{
static void Main(string[] args)
{
SocketReader("127.0.0.1", 10000);
}
static void SocketReader(string address, int port)
{
var ipPoint = new IPEndPoint(IPAddress.Parse(address), port);
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(ipPoint);
socket.Send(Encoding.Unicode.GetBytes("READER"));
do {
Console.WriteLine("loop");
var data = new byte[2048];
Console.WriteLine("start receive");
var bytes = socket.Receive(data, data.Length, 0);
Console.WriteLine("end receive");
Console.WriteLine(bytes);
}
while (socket.Available > 0);
socket.Close();
}
}
}
回答
loop
start receive
附加问题
也许它被阻止直到连接断开?
明白了。原因在于错误的重新编码。更改
Encoding.Unicode为Encoding.UTF8,一切都开始按小时工作。