【问题标题】:tcp server c# on windows, tcp client python raspberry pitcp server c# on windows, tcp client python raspberry pi
【发布时间】:2014-02-28 06:33:39
【问题描述】:

我正在开发我的项目,我必须在 windows 上用 c# 编写的 tcp 服务器和在 raspbian (raspberry pi) 上用 python 编写的客户端之间进行通信。我的服务器工作正常(在本地机器上用 c# 客户端测试),但是运行时客户端数据没有发送到服务器端。

c#代码:

static void Main(string[] args)
    {

        IPAddress localAdd = IPAddress.Parse(SERVER_IP);
        TcpListener listener = new TcpListener(localAdd, PORT_NO);
        Console.WriteLine("Krenuo sa radom...");
        listener.Start();

        while (true)
        {

            TcpClient client = listener.AcceptTcpClient();


            NetworkStream nwStream = client.GetStream();
            byte[] buffer = new byte[client.ReceiveBufferSize];


            int bytesRead = nwStream.Read(buffer, 0, client.ReceiveBufferSize);


            string dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);
            Console.WriteLine("Primljeno : " + dataReceived);


            Console.WriteLine("Dobijena poruka na serveru : " + dataReceived);
            nwStream.Write(buffer, 0, bytesRead);

            Console.WriteLine("\n");

            client.Close();
        }
        listener.Stop();

python 代码:

def send(ctrl_cyc):

HOST, PORT = "10.93.34.41", 5000
data = ""
data += str(ctrl_cyc)

# Create a socket (SOCK_STREAM means a TCP socket)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
# Connect to server and send data
    sock.connect((HOST, PORT))
    sock.sendall(bytes(data + "\n", "utf-8"))

finally:
    sock.close()
return True

【问题讨论】:

    标签: c# python sockets tcp


    【解决方案1】:

    当您绑定到特定 IP 地址时,服务器仅侦听用于该 IP 地址的接口。因此,如果您有多个网络适配器并且想要监听所有这些适配器,请在 TcpListener 的构造函数中使用 IpAddress.Any

    如果不是这样,您能否提供更多信息: 客户是否提供任何错误信息/异常?你嗅探过客户端和服务器之间的流量吗?连接是否建立? ...

    【讨论】:

    • 先tnx回复。我按照您的建议更改为“IpAddress.Any”,现在我可以与另一台计算机上的另一个 Windows c# 客户端通信,但我仍然可以与我的 rpi 通信。尝试连接服务器时出现超时错误。有什么猜测吗?
    • 也从命令行从两个设备正常工作的ping
    • 如果您可以从 C# 客户端连接到另一台计算机上的服务器,则您的服务器应该没问题。由于我对 Python Sockets 和 Rasperty PI 都没有经验,我只能猜测下一步该做什么。也许您可以尝试像docs.python.org/2/howto/sockets.html 上的第一个示例那样连接到 Internet 上的 Web 服务器,或者您检查 Raspery PI 是否具有阻止传出套接字连接的某些配置...
    • Tnx 为您提供帮助,但不幸的是,一切似乎都与教程中的一样。也许问题出在我的 win com 服务器上的网络权限或其他问题上。我会继续努力的。
    【解决方案2】:

    我找到了解决方案...好吧,我想我找到了。 问题是我的帐户可能无权收听网络中的其他设备(网络配置)。我在管理员的计算机上尝试了我的解决方案,它工作正常,我也将它放在公司的服务器上,它工作得很好。

    如果有人需要,这里有代码。

    c#代码:

    static void Main(string[] args)
        {
    
            IPAddress localAdd = IPAddress.Parse(SERVER_IP);
            TcpListener listener = new TcpListener(IPAddress.Any, PORT_NO);
            Console.WriteLine("Krenuo sa radom...");
            listener.Start();
    
            while (true)
            {
    
                TcpClient client = listener.AcceptTcpClient();
    
    
                NetworkStream nwStream = client.GetStream();
                byte[] buffer = new byte[client.ReceiveBufferSize];
    
    
                int bytesRead = nwStream.Read(buffer, 0, client.ReceiveBufferSize);
    
    
                string dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);
                Console.WriteLine("Primljeno : " + dataReceived);
    
    
                Console.WriteLine("Dobijena poruka na serveru : " + dataReceived);
                nwStream.Write(buffer, 0, bytesRead);
    
                Console.WriteLine("\n");
    
                client.Close();
            }
            listener.Stop();
        }
    

    python 代码:

    import socket
    
    HOST, PORT = "10.XX.XX.XX", 5000
    ctrl_cyc="1234567"
    data = ""
    data += str(ctrl_cyc)
    
        # Create a socket (SOCK_STREAM means a TCP socket)
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    try:
        # Connect to server and send data
        sock.connect((HOST, PORT))
        sock.sendall(bytes(data + "\n"))
        data = sock.recv(1024)
        print data
    
    finally:
        sock.close()
    

    【讨论】:

      猜你喜欢
      • 2015-12-13
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-13
      • 2020-10-28
      • 2019-07-29
      相关资源
      最近更新 更多