目前在做个用Socket的ERP小软件。问题如下

hhc123 2010-01-22 03:10:36
用异步连接方试。
ERP客户端有多个窗体,
客户端是只开通一个接收线程呢.(暂时说成接收线程)
还是每个子窗体都要搞一个呢。
比如,你打开一个子窗体就建立一个与服务器的连接。
以前只搞过同步的,每个窗体都创建一个连接会使服务端压力大。异步的话是不是不会啊?
(我承认我菜,谢绝攻击)

...全文
171 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztenv 2010-01-22
  • 打赏
  • 举报
回复
差不多吧,
hhc123 2010-01-22
  • 打赏
  • 举报
回复
目前只需要理清这个思路,一切从简。
hhc123 2010-01-22
  • 打赏
  • 举报
回复

public class EntityChangedEventArgs : EventArgs
{
public EntityChangeType ChangedType { get; set; }
public Type EntityType { get; set; }
public object Entity { get; set; }
}



C# code
//CSocket类,也就是接收信息用的类

public delegate void Msg(EntityChangedEventArgs e);
//public delegate void Msg(string text);//定义一个委托 接收聊天信息
public static event Msg myevent1;


C# code
//在主窗体中
CSocket.myevent1+=new CSocket.Msg(CSocket_myevent1);
public void CSocket_myevent1(EntityChangedEventArgs e)
{
在这里收到
e.EntityType
====


}





差不多像这样吧
ztenv 2010-01-22
  • 打赏
  • 举报
回复
要充分利用强大的事件机制
ztenv 2010-01-22
  • 打赏
  • 举报
回复
收到数据后,用事件去通知窗体,你收到了数据,并在协议解析模块去解析你的协议为具体的类或结构数据,然后通知到窗体就行了,
hhc123 2010-01-22
  • 打赏
  • 举报
回复

//我以前都是用如下一个客户端接收线程
public delegate void ListBoxOnline(string text);//定义一个委托 在线用户列表
public static event ListBoxOnline myevent;
switch (splitString[0])
{
case "Talk":
myevent1(receiveString);
break;
case "OnlineUser":
myevent(receiveString);
break;
case "Logout":

break;
}

我以前是这样接收信息的,只有一个窗体好办,委托一下就ok.
问题是做个ERP窗体很多,按lianshaohua你在4楼说的,也是要一个接收线程。
我就是不明白要怎么把这些数据显示到相关的窗体。所以我以前用的是以上方法。

满衣兄 2010-01-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hhc123 的回复:]
ok,谢谢lianshaohua;
比如
client 只有一个Socket a;
登陆--连接服务器验证身份->并返回一些配置信息,然后socket a关掉了。
打开订单查询Form->查询订单->连接服务器创建了Socket a并发送请求指令
是这样吗?

我以前做的都是聊天程序,只有单一窗体的,所以理不清思路


[/Quote]
是这样的。
ztenv 2010-01-22
  • 打赏
  • 举报
回复
socket连接不能放到窗体里去,你的窗体和连接没有任何关系的,

你要用短连接?其实没有必要,只建立一次连接就行了,然后一直维持这个连接,不过长/短在这里并不重要;重要的是你的思想


建立一个类,通讯类,有:发送队列IList<T>(存储要发送的任何数据,把要发送的数据封装为一个类或结构)

让所有的窗口直接/间接依赖这个通讯类,发送数据时,先把窗口数据写入通讯类的发送队列,通讯类的发送线程一直检测你的发送队列是否为空,如果不为空,就发送数据,直到发送完,然后维持你的socket连接;应该能解决了吧?
hhc123 2010-01-22
  • 打赏
  • 举报
回复
ok,谢谢lianshaohua;
比如
client 只有一个Socket a;
登陆--连接服务器验证身份->并返回一些配置信息,然后socket a关掉了。
打开订单查询Form->查询订单->连接服务器创建了Socket a并发送请求指令
是这样吗?

我以前做的都是聊天程序,只有单一窗体的,所以理不清思路

ztenv 2010-01-22
  • 打赏
  • 举报
回复
比如,你打开一个子窗体就建立一个与服务器的连接。
为什么不用一个连接呢?你把所有要发的数据写到发送队列中,然后让发送线程去发吧,只要有数据就发,具体的连接让线程去建立和维护,不是更好?
hhc123 2010-01-22
  • 打赏
  • 举报
回复
有没有相关资料or电子书之类的,也发个帮忙一下。谢谢。
assky124 2010-01-22
  • 打赏
  • 举报
回复
尽量把界面和数据分离。
既然是ERP系统的话,肯定要牵扯模块的扩展。
你这样耦合度这么高的话,更新的话,估计会搞死人的
wangping06 2010-01-22
  • 打赏
  • 举报
回复
帮顶

110,537

社区成员

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

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

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