关于socket的问题,急、急急

Main- 2016-03-17 09:45:31
形容一下需求,客户端和服务器连接后客户端发送消息,服务器在这个套接字上同步作出回应,为了解决服务器并发情况,现在的想法是,服务器收到客户端的消息,将消息放到其他地方处理,处理完后让另一个socket通过原先的套接字将消息传回等待中的客户端。(客户端和服务器只连接一次,但是服务器是分两部分处理的)请问能实现吗?
...全文
103 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
_小黑_ 2016-03-18
  • 打赏
  • 举报
回复
一个socket 可以解决的问题 就不要用两个了 而且 你怎么 使用另一个socket 获得 所有客户端的 连接呢 如果是 赋值的话 那么socket 是一个类 属于引用类型 即使是 100 个socket 他引用的还是同一个地址 然而这样并没什么卵用 所有说 一个socket 就可以解决了 这个代码是 服务器 异步接收 客户端 数据的代码 其中 serverSocket 客户端 连接的socket Event_ReceiveData 是处理 数据的事件

private void ReceiveCallBack(IAsyncResult ar)
        {
            StateObject state = (StateObject)ar.AsyncState;
            Socket serverSocket = state.workSocket;

            try
            {
                int bytesRead = serverSocket.EndReceive(ar);
                if (bytesRead > 0)
                {
                    byte[] data = new byte[bytesRead];//实际接收的数据
                    Buffer.BlockCopy(state.buffer, 0, data, 0, data.Length);
                    Event_ReceiveData(serverSocket, data);
                    serverSocket.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallBack), state);
                }
            }
            catch (SocketException ex)
            {
                if (ex.Message.IndexOf("远程主机强迫关闭了一个现有的连接") != -1)
                {

                }
                else
                {
                    throw ex;
                }
            }

        }
xian_wwq 2016-03-18
  • 打赏
  • 举报
回复
在着急解决现有问题前,建议先做点功课, Windows操作系统提供了选择(Select)、异步选择(WSAAsyncSelect)、事件选择(WSAEventSelect)、重叠I/O(Overlapped I/O)和完成端口(Completion Port)共五种I/O模型。 根据自己的问题特性和规模,选择适用自己的模型。 一般思路是数据通讯和数据解析分离,分离方式有很多 lz搜SocketAsyncEventArgs,不需要自己从socket开始重新造轮子
tcmakebest 2016-03-17
  • 打赏
  • 举报
回复
我只能说流程越少越好,一个连接能搞定的事不要用两个连接.
Main- 2016-03-17
  • 打赏
  • 举报
回复
引用 1 楼 shingoscar 的回复:
这叫画蛇添足 请先自己写一遍最简单的多个客户端和服务器端通讯的代码来
多个客户端同时发送消息时服务器会为每一个客户端建立一个连接,但是如果不另起线程的话是不是多个连接会排队等候处理?我没理解错吧?这样结不能解决并发问题了吧
Main- 2016-03-17
  • 打赏
  • 举报
回复
有没有大神 啊!!!
Poopaye 2016-03-17
  • 打赏
  • 举报
回复
这叫画蛇添足 请先自己写一遍最简单的多个客户端和服务器端通讯的代码来

110,535

社区成员

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

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

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