求教Socket异步接收的数据怎么传给原来调用的窗体上

sinomac 2015-06-27 12:37:17
我用SanNiuSignal异步通讯系统测试做测试,http://bbs.cskin.net/thread-501-1-1.html (这里可以下载)
我在NEW登录窗体的时候把TxClient传参进去。
在Form1登录窗体上我发送了数据给服务端,服务端要返回登录是否成功,但接收数据是在异步统一一个地方接收的。我想把接收到的数据传回这个登录窗口,请问要怎么办?
我是新手,接受口水也接收板砖,当然我更希望有朋友可以告诉我。

///显示登录窗口,这里是主窗口
private void button9_Click(object sender, EventArgs e)
{
Form1 nf = new Form1(TxClient);
nf.Show();
}



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SanNiuSignal;
using System.Threading;
using System.Net;
using SanNiuSignal.FileCenter;

namespace SocketClient
{
public partial class Form1 : Form
{
private ITxClient TxClient = null;
public Form1(ITxClient TxClient)
{
InitializeComponent();
this.TxClient = TxClient;
}

//这里是登录按钮事件
private void button1_Click(object sender, EventArgs e)
{
///发送用户我和密码并接收返回的数据判断是否登录成功,
//发送数据我会,但是接收回来这里不懂怎么办。
}

}
}

...全文
286 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinomac 2015-06-27
  • 打赏
  • 举报
回复
听前辈这么说有点明白了,接收是整个进程都在接收,相互解析对应的返回数据,我想是在请求服务端时传递一个指令参数,服务端处理完相应操作后返回数据时把这个参数一起带回来,客户端根据这个参数来过滤谁接收并做处理,请问前辈是不是这样操作?谢谢!
sinomac 2015-06-27
  • 打赏
  • 举报
回复
引用 6 楼 wyd1520 的回复:
看了你的代码也是醉了。。。。 TxClient.AcceptString += new TxDelegate<IPEndPoint, string>(accptString);//当 那你也得在 Form1 进行绑定这个事件
这样的话在主窗口那里绑定的事件也可以同时获取啊?两个或更多地方都同时获取了。
本拉灯 2015-06-27
  • 打赏
  • 举报
回复
看了你的代码也是醉了。。。。 TxClient.AcceptString += new TxDelegate<IPEndPoint, string>(accptString);//当 那你也得在 Form1 进行绑定这个事件
sinomac 2015-06-27
  • 打赏
  • 举报
回复
http://bbs.cskin.net/thread-970-1-1.html 源码在这里,谢谢!
wanghui0380 2015-06-27
  • 打赏
  • 举报
回复
不知道你想表达什么,看你的代码其实已经接到数据了,至于你后面说滴“现在接收数据的是在主窗体上,要怎么返回到这个调用的窗体上呢”,有点表达不清,不知道你想做什么,只姑且理解成,你外面有个UI调用这个from,那么简单的方法 其实就是把 private ITxClient TxClient = null 这个玩意改写成 public ,然后外面滴UI直接挂接事件。当然也可以自己定义委托 (这个就不详细描述了,估计你一时半会接受不了其他的方式)
sinomac 2015-06-27
  • 打赏
  • 举报
回复

namespace SocketClient
{
    public partial class Form1 : Form
    {
        private ITxClient TxClient = null;
        public Form1(ITxClient TxClient)
        {
            InitializeComponent();
            this.TxClient = TxClient;
        }
 
       //这里是登录按钮事件
        private void button1_Click(object sender, EventArgs e)
        {   
          User user=new User();
          user.name="张三";
          user.psw="******";
          TxClient.sendMessage(user);
  
        ///上面发送用户名和密码给服务端后,服务端返回是否正确,并返回0,1,2,(0可以登录,1密码错误,2已经在线)
      因为是异步,我这里发送了请求,而实际接收的数据却在主窗体上了。
        }
 
    }
}
sinomac 2015-06-27
  • 打赏
  • 举报
回复
这是主窗体上

    public partial class Client : Form ,IFileSendMust
    {
        #region TCP客户端区
        private ITxClient TxClient = null;
        ///连接服务器
        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                TxClient = TxStart.startClient(textBox2.Text, int.Parse(textBox3.Text));
                TxClient.AcceptString += new TxDelegate<IPEndPoint, string>(accptString);//当收到文本数据的时候
                TxClient.StartEngine();
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message);
            }
        }
        /// <summary>
        /// 接收到文本数据的时候
        /// </summary>
        /// <param name="str"></param>
        private void accptString(IPEndPoint end, string str)
        {
            textBox1.Text = str;
        }
}
因为是异步通信,这里是主窗口接收数据的地方。 实际我是在Form1 上的按钮发送了请求,我想这里请求完,接收返回的数据。现在接收数据的是在主窗体上,要怎么返回到这个调用的窗体上呢?求教。
  • 打赏
  • 举报
回复
写明白你的 button1_click 方法中到底是怎样接收的。 你应该写3、4行可执行的代码来说明你如何接收到数据(只不过接收到之后暂时没用到)的。如果你不写一个可执行的代码,甚至完全隐藏整个环境接口,相当于你去超市买2斤大米时还要顺带把人家的铲子顺走,谁会给你写代码呢?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧