socket 多个服务器链接一个客户端

p_flag 2020-06-22 10:15:50
大家好,最近有一个项目,接口是socket,需要一个客户端链接多个服务器端,新手想咨询一下大家,该如何做比较好,目前自己想了两个方法,再软件上放置多个socket控件,第一:通过多线程方式链接这多个socket,收取和发送数据,第二:不用多线程,直接写程序,但是有个问题,我的客户端要发送和接收数据,再软件初始化时会发送申请数据命令,多个socket会有问题。有人做过如此的项目吗,求帮助
...全文
10032 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
p_flag 2020-06-23
  • 打赏
  • 举报
回复
大家好,正常收取数据部分已经实现,关于重连我是如下的操作,但是有问题,还请大家指教 链接方式通过线程方式链接 链接按钮脚本如下 Dim threadConnect_2 As New Thread(New ThreadStart(AddressOf startConnect_2)) threadConnect_2.Start() startConnect_2函数如下 address_2 = IPAddress.Parse(txtAddress2.Text.Trim) port_2 = Integer.Parse(txtPort2.Text.Trim()) connect_2 = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) Dim asyncCallBack_2 As New AsyncCallback(AddressOf connectEnd_2) connect_2.BeginConnect(New IPEndPoint(address_2, port_2), asyncCallBack_2, connect_2) 重连方法如下 intByte_2 = connect_2.EndReceive(pIAsyncResult) If connect_2.Available = 0 And intByte_2 = 0 Then connect_2.Close() txtMessage.AppendText("Client_2:" + " 您已断开连接!") Dim threadConnect_2 As New Thread(New ThreadStart(AddressOf startConnect_2)) threadConnect_2.Start() End If
  • 打赏
  • 举报
回复
例如一个程序为各个部分调用通讯功能而封装的接口可能是
void SendMessage<T,R>(string serverID, T obj, Action<R> callback, Action<Exception> exCallback);

任何程序给 serverID 这个服务器发送 T 类型的对象 obj,然后当网关收到返回值时解析为R类型的对象并且通过 callback 委托回调。如果收到对方发来的异常信息,解析为 Exception类型的对象通过 exCallback 委托返回。你实现这样一个接口,能理解如何设计一个 api。
  • 打赏
  • 举报
回复
即使一个客户端(或者服务器)要处理信息,它本身也应该是设计为异步的。也就是说当一个进程内的客户程序调用这个网关功能对外通讯时,提供一个“输入”,然后进程异步发送消息,主程序(父线程)继续做别的事情。当网关程序收到消息并且解析出一条完整的消息信息之后(此时可能继续解析后边的消息),回调当初的客户程序部分注册的回调委托,完成异步事件通知工作。只有异步的才是有效率的。

同时,区分了会话数据结构的设计也能说明,你确实是“面向对象”设计而搞清楚了不同客户对象、不同通讯委托在数据结构上的区别。
qq_39080073 2020-06-22
  • 打赏
  • 举报
回复
多个socket 跟一个socket处理方式是一样的,不要担心电脑底层收发问题,每个socket都通过事件来收发不会出问题。 行车记录监控摄像头
  • 打赏
  • 举报
回复
没有什么“多个服务器链接一个客户端”这种说法。既然是“服务器-客户端”架构,那么就是一个客户端连接多个服务器。而不是相反概念。
p_flag 2020-06-22
  • 打赏
  • 举报
回复
开机初始化的时候多个socket会通过一个网口传递出多个命令,然后有些连不上服务器端
by_封爱 2020-06-22
  • 打赏
  • 举报
回复
你既然说到 :"多个socket会有问题." 那么请描述一下 你这个问题 是什么问题?
遇见女神 2020-06-22
  • 打赏
  • 举报
回复
一个连接一个socket
wanghui0380 2020-06-22
  • 打赏
  • 举报
回复
多client没有问题。 网口一个也没有问题。我们大多数机器就一个网口。这不妨碍我们一边开qq,一边看电影,一边玩游戏对么 所以不是网口问题,是套接字和端口问题。so,我们本地采用ip any即可 当然有关解析部分,一个套接字一个解析过程,别搞啥静态共享解析就成
良朋 2020-06-22
  • 打赏
  • 举报
回复 1
你在你的客户端创建多个线程,每个线程对应一个SOCKET服务就可以了。

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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