C#套接字编程

ljw1314520 2012-04-25 11:08:09
下面是我用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);
}
}
}
...全文
134 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljw1314520 2012-04-26
  • 打赏
  • 举报
回复
出错的地方就是上面列出的代码中接受客户端连接的方法的 RecieveAccept()方法。各位大侠帮忙看看怎样改可以循环接受客户端发送过来的信息!

saybookcat 2012-04-26
  • 打赏
  • 举报
回复
重新监听
cheng2005 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
要实现接收多终端的多条信息收发,大体思路这样:
ServerSocket.Accept();这个要写在一个线程中,因为是while (true)。

接收和发送要写在另一个线程中也要while (true)
[/Quote]
没必要,事件驱动就可以了。
weiyiVB 2012-04-26
  • 打赏
  • 举报
回复
要实现接收多终端的多条信息收发,大体思路这样:
ServerSocket.Accept();这个要写在一个线程中,因为是while (true)。

接收和发送要写在另一个线程中也要while (true)
orochiheart 2012-04-26
  • 打赏
  • 举报
回复
套接字指的是什么?过去做通讯程序的时候经常碰到抱套接字的错误。。。
h_h_f 2012-04-26
  • 打赏
  • 举报
回复
经过一番波折,终于找到程序出错的地方


  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
经过一番波折,终于找到程序出错的地方
[/Quote]

你是想考别人吗?

如果不是,为什么不直接说出你找到的“出错的地方”的问题呢?

111,126

社区成员

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

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

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