python - 如何将消息连续发送到异步套接字-(Python和C#)

标签 python c# sockets asynchronous

我可能会犯一个菜鸟错误,但是我刚刚开始尝试在PC和Raspberry Pi之间进行本地TCP通信。
我的服务器在Raspberry Pi上运行(使用python),而我的PC上的客户端(使用C#编写)能够连接到RPi,正确发送一组数据,然后不再发送,除非建立了新的连接。
我只是尝试多次通过连接发送数字2(例如,我按下连接按钮,然后可以多次按下发送按钮,服务器将多次接收数据。
任何帮助表示赞赏。
客户端代码(C#):

public ClientForm()
        {
            ipAddress = IPAddress.Parse("192.168.0.98");
            port = 3333;
            InitializeComponent();
        }

        private void connectCallback(IAsyncResult AR)
        {
            try
            {
                clientSocket.EndConnect(AR);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnConnect_Click(object sender, EventArgs e)
        {
            try
            {
                clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                clientSocket.BeginConnect(new IPEndPoint(ipAddress, port), new AsyncCallback(this.connectCallback), null);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            try
            {
                byte[] buffer = { 2 };
                clientSocket.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(SendCallback), null);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void SendCallback(IAsyncResult AR)
        {
            clientSocket.EndSend(AR);
        }
服务器代码(Python 3):
import socket
port = 3333
ipAddress = '192.168.0.98'
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

serverSocket.bind((ipAddress, port))

while True:
    serverSocket.listen(0)
    clientsocket, address = serverSocket.accept()
    received = int.from_bytes(clientsocket.recv(1), 'big')
    print(received)

最佳答案

我认为问题出在您的python服务器上。accept函数阻止您的循环,直到客户端要求服务器进行连接为止。
连接客户端之后,服务器将接受连接,但是在循环之后,服务器将阻塞,直到它可以接受另一个连接。这就是为什么它不能接收多个数据的原因。
我看到两种方法可以解决此问题:
使用select函数,因此您可以立即使用acceptreceive使用threads,因此您可以将acceptreceive作为并行任务

关于python - 如何将消息连续发送到异步套接字-(Python和C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65514286/

相关文章:

c# - 如何通过在运行时按下按钮在 C# 中动态删除组合框?

c# - 在.NET core 2 MVC应用程序中配置JWT访问 token

c# - ConfigurationManager.AppSettings[Key] 是否每次都从 web.config 文件中读取?

python - Twisted 是 httplib2/socket 的替代品吗?

c - C 是否包含内置套接字?

python - 选择后没有数据可用于接收

python - Pandas 中的行未正确附加

python - 如何显示与输入匹配的同一行的值?

python - 使用 python 计算文本文档的逐点互信息

java - 安卓聊天客户端: socket connection