首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

TCP/IP多用户通讯

2012-08-31 
TCP/IP多用户通信想通过TCP实现一个服务器对应多个客户端的通信,现在服务器可以与多台客户机连接,但是只能

TCP/IP多用户通信
想通过TCP实现一个服务器对应多个客户端的通信,现在服务器可以与多台客户机连接,但是只能跟第一个建立连接的客户端发送信息,怎么解决?
服务器代码如下:
//发送信息
 private void button2_Click_1(object sender, EventArgs e)
  {
  try
  {
  Byte[] sendByte = new Byte[64];
  string sendStr = this.textBox1.Text + ":" + this.textBox3.Text + "\r\n";
  sendByte = Encoding.BigEndianUnicode.GetBytes(sendStr.ToCharArray());
  acceptedSocket.Send(sendByte, sendByte.Length, 0);
  }
  catch { }
  }
//建立连接
  private void button1_Click_1(object sender, EventArgs e)
  {
  string ip = textBox4.Text;
  string port = textBox5.Text;
  HostIP = IPAddress.Parse(ip);
  try
  {
  point = new IPEndPoint(HostIP, Int32.Parse(port));
  socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  socket.Bind(point);
  socket.Listen(50);
  acceptedSocket = socket.Accept();
  Thread thread = new Thread(new ThreadStart(Proccess));
  thread.Start();
  }
  catch (Exception ey)
  {
  MessageBox.Show(ey.Message);
  }
  }
客户端与服务器代码类似

[解决办法]
据说要加上while(true)



[解决办法]

C# code
private Dictionary<string, Socket> userlist = new Dictionary<string, Socket>();while (balive)                {                    byte[] buffer = new byte[1024 * 10];                    soket.Receive(buffer);                    string msg = Encoding.Unicode.GetString(buffer).TrimEnd('\0');                    string[] tokens = msg.Split('|');                    if (tokens[0] == "CONN")                    {                        if (this.userlist.ContainsKey(tokens[0]))                        {                            break;                        }                        else                        {                            this.userlist.Add(tokens[1], soket);                        }                     }public void SendMessage(string message, string temp)        {            foreach (KeyValuePair<string, Socket> item in userlist)            {                    byte[] buffer = Encoding.Unicode.GetBytes(message.ToCharArray());                    item.Value.Send(buffer);            }        } 

热点排行