【问题标题】:c# socket Thread时间:2019-05-10 标签:c#socketThread
【发布时间】:2020-06-15 14:43:27
【问题描述】:

尝试通过 c# winform 线程化套接字。我不知道这段代码是否正常工作。如果没有,我想用线程处理套接字。寻求帮助。

有消息提示客户端和服务器已连接,但没有相互接收数据。我不知道是什么问题。

private void Login_box_Click(object sender, EventArgs e)
        {
            string email = textBox1.Text;
            string pw = textBox2.Text;

            Thread thread = new Thread(new ThreadStart(delegate ()
            {
                this.Invoke(new Action(() => socketLogin(email, pw)));
                Thread.Sleep(1000);
            }));

            thread.Start();
}

 

private void socketLogin(string email, string pw)
            {
                var loginjson = new JObject();

                loginjson.Add("email", email);
                loginjson.Add("password", pw);


                var socket = IO.Socket("http://localhost:3000/login.html");
                socket.On(Socket.EVENT_CONNECT, (data) =>
                {
                    socket.Emit("socketlogin", loginjson.ToString());  
                });

                socket.On("login", (data) => {  
                    MessageBox.Show(data.ToString());

                });

            }

服务器节点.js

io.on('connection', function(socket) {
    console.log('connection');
    socket.on('socketlogin', function(data) {  

        var testLogin = { 'Login': "success" };

        socket.emit('login', data);
    });
  });

【问题讨论】:

  • 1) 生成一个显式线程,该线程只是将线程编组(通过Invokexxx)返回到 UI 没有任何意义 2) 如果您必须调用使用 BeginInvoke,因为 Invoke 可能导致应用程序死锁 3) Sleeping 在线程末尾没有任何作用。考虑使用async/await 等价物
  • 谢谢。但我不知道如何改变它。我可以请求更多帮助吗?
  • @jaebeom33 - 等待任务,年轻的学徒。

标签: c# node.js multithreading sockets


【解决方案1】:

我会做如下的事情:

private void Login_box_Click(object sender, EventArgs e)
{
    string email = textBox1.Text;
    string pw = textBox2.Text;

    ThreadPool.QueueUserWorkItem(socketLogin, new Tuple<string, string>(email, pw));
}

private void socketLogin(object obj)
{
    string email = ((Tuple<string, string>)obj).Item1;
    string pw = ((Tuple<string, string>)obj).Item2;

    var loginjson = new JObject();

    loginjson.Add("email", email);
    loginjson.Add("password", pw);


    var socket = IO.Socket("http://localhost:3000/login.html");
    socket.On(Socket.EVENT_CONNECT, (data) =>
    {
        socket.Emit("socketlogin", loginjson.ToString());  
    });

    socket.On("login", (data) => {  
        MessageBox.Show(data.ToString());

    });

}

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2020-10-01
    • 2015-06-14
    • 2011-07-08
    • 2012-02-03
    • 2017-04-15
    • 2021-07-31
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多