当前位置:编程学习 > C#/ASP.NET >>

C#套接字相关编程

下面是我用C#编写的服务器端监听客户端的部分代码,主要用于响应客户端的连接请求和循环接收客户端发来的信息,但是程序运行的时候能响应多个客户端的连接请求(即客户端能与服务器端能正常连接),但是对于客户端发送信息的时候,服务器端只能接受一条聊天信息,客户端再次发送信息的时候就接收不到了,而且所有的客户端都是这样,用红色标记的地方程序的主要错误所在(也就是我写的注释:接受客户端连接的方法下面的那段代码),大家帮我看看怎样修改这段程序可以让服务器端能正常处理所有客户端发来的信息:(我的目的是实现像qq群聊天一样的功能:即有一个说话,所有在线的客户都可以收到信息,我的思想是通过服务器端接收客户端发来的聊天信息,再通过服务器发送给所有的在线用户):
  //服务器开始运行
  private void Startbutton_Click(object sender, EventArgs e)
  {
  ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  ServerInfo = new IPEndPoint(IPAddress.Any, 8001);
  ServerSocket.Bind(ServerInfo);//将SOCKET接口和IP端口绑定   
  ServerSocket.Listen(10);//开始监听
  MsgBuffer = new byte[65535];//消息数据大小   
  socket = ServerSocket.Accept();
  ClientSockets.Add(socket);
  ServerThread = new Thread(RecieveAccept);//将接受客户端连接的方法委托给线程   
  ServerThread.Start();//线程开始运行
  CheckForIllegalCrossThreadCalls = false;//不捕获对错误线程的调用
  Startbutton.Enabled = false;
  Stopbutton.Enabled = true;
  StateMsg.Text = "服务正在运行" + " 运行端口:" + 8001 + "\n";
  ClientList.Items.Add("服务于 " + DateTime.Now.ToString() + " 开始运行.");
  }
   
  //接受客户端连接的方法
  private void RecieveAccept()
  {
  while (true)
{
socket = ServerSocket.Accept();
try
{
ClientSockets.Add(socket);
ClientSockets[ClientSockets.Count - 1].BeginReceive(MsgBuffer, 0, MsgBuffer.Length, 0, new AsyncCallback(RecieveCallBack), ClientSockets[ClientSockets.Count - 1]);
ClientList.Items.Add(ClientSockets[ClientSockets.Count - 1].RemoteEndPoint.ToString() + " 成功连接服务器.");
ClientList.Items.Add("在线人数" + ClientSockets.Count); }  catch (Exception ex)
  {
  MessageBox.Show(ex.Message);
  }
  }
  } --------------------编程问答-------------------- 由于ClientSockets套接字监听接受来消息的时候会阻塞当前线程,可以把接收消息写在另一个方法中,委托给另一个新的线程 --------------------编程问答-------------------- 你的套接字是否设置为阻塞模式,收不到信息会一直等待,改为非阻塞试试 --------------------编程问答-------------------- 上面说错了,不是阻塞当前线程是阻塞套接字 --------------------编程问答-------------------- --------------------编程问答-------------------- 能不能给个具体的代码?我刚学套接字方面的东西,好多东西不是很理解!谢谢!!!!!
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,