无法读取从 python 上的 TCP 客户端发送到 C# 中的 TCP 服务器的数据
Cannot read data sent from TCP client on python to TCP server in C#
我有一个用 C# 编写的 windows 服务,它打开了一个 TCP 套接字。我已经通过 telnet 连接并测试了这个 TCP 套接字,我能够使用 telnet 协议通过 putty 向套接字发送和接收消息。当连接一个小 python 脚本时,该脚本能够接收消息,但无法发送它们以便 C# 服务器接收它们。服务器的代码是:
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
TcpListener listener = new TcpListener(ipAddress, 5555);
listener.Start();
Thread whileThread = new Thread(() =>
{
while (true)
{
TcpClient client = listener.AcceptTcpClient();
Thread childThread = new Thread(() =>
{
NetworkStream stream = client.GetStream();
StreamReader streamreader = new StreamReader(client.GetStream(), Encoding.ASCII);
string line = null;
WriteToNetworkStream(stream, "Connected to the service");
eventLog1.WriteEntry("TCP Socket opened");
eventLog1.WriteEntry((GetState(client) == TcpState.Established).ToString()); //this does return True.
while ((line = streamreader.ReadLine()) != "<EOF>" && GetState(client) == TcpState.Established)
{
eventLog1.WriteEntry(line);
}
eventLog1.WriteEntry("TCP Socket closed");
stream.Close();
client.Close();
});
childThread.Start();
}
});
whileThread.Start();
对方的python脚本是:
import socket
import time
TCP_IP = '127.0.0.1'
TCP_PORT = 5555
BUFFER_SIZE = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
time.sleep(1)
s.send("this is a test")
time.sleep(10)
data = s.recv(BUFFER_SIZE)
print(data)
另一方从未收到消息“这是一个测试”,但直到 time.sleep(10) 完成后才记录“TCP 套接字关闭”,表明 C# 确实认识到某种长期联系。此外,数据变量确实包含预期的“已连接到服务”,表明服务器可以向客户端发送数据。正如我之前所说,当尝试使用带有 putty 的 telnet 发送和接收消息时,它确实可以正常工作。
您是否尝试过从网络流中读取字节?我不能说它是否会有所作为,但值得尝试检查是否有实际字节进入:
NetworkStream stream = client.GetStream();
Byte[] bytes = new Byte[256]; //whatever size is appropriate
int bytesRead;
string data;
while ((bytesRead = stream.Read(bytes, 0, bytes.Length)) != 0)
{
data = System.Text.Encoding.ASCII.GetString(bytes, 0, bytesRead);
// ......
}
我有一个用 C# 编写的 windows 服务,它打开了一个 TCP 套接字。我已经通过 telnet 连接并测试了这个 TCP 套接字,我能够使用 telnet 协议通过 putty 向套接字发送和接收消息。当连接一个小 python 脚本时,该脚本能够接收消息,但无法发送它们以便 C# 服务器接收它们。服务器的代码是:
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
TcpListener listener = new TcpListener(ipAddress, 5555);
listener.Start();
Thread whileThread = new Thread(() =>
{
while (true)
{
TcpClient client = listener.AcceptTcpClient();
Thread childThread = new Thread(() =>
{
NetworkStream stream = client.GetStream();
StreamReader streamreader = new StreamReader(client.GetStream(), Encoding.ASCII);
string line = null;
WriteToNetworkStream(stream, "Connected to the service");
eventLog1.WriteEntry("TCP Socket opened");
eventLog1.WriteEntry((GetState(client) == TcpState.Established).ToString()); //this does return True.
while ((line = streamreader.ReadLine()) != "<EOF>" && GetState(client) == TcpState.Established)
{
eventLog1.WriteEntry(line);
}
eventLog1.WriteEntry("TCP Socket closed");
stream.Close();
client.Close();
});
childThread.Start();
}
});
whileThread.Start();
对方的python脚本是:
import socket
import time
TCP_IP = '127.0.0.1'
TCP_PORT = 5555
BUFFER_SIZE = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
time.sleep(1)
s.send("this is a test")
time.sleep(10)
data = s.recv(BUFFER_SIZE)
print(data)
另一方从未收到消息“这是一个测试”,但直到 time.sleep(10) 完成后才记录“TCP 套接字关闭”,表明 C# 确实认识到某种长期联系。此外,数据变量确实包含预期的“已连接到服务”,表明服务器可以向客户端发送数据。正如我之前所说,当尝试使用带有 putty 的 telnet 发送和接收消息时,它确实可以正常工作。
您是否尝试过从网络流中读取字节?我不能说它是否会有所作为,但值得尝试检查是否有实际字节进入:
NetworkStream stream = client.GetStream();
Byte[] bytes = new Byte[256]; //whatever size is appropriate
int bytesRead;
string data;
while ((bytesRead = stream.Read(bytes, 0, bytes.Length)) != 0)
{
data = System.Text.Encoding.ASCII.GetString(bytes, 0, bytesRead);
// ......
}