我以前用vb做个聊天工具,用winsock
现在我想用c#重新,但是在vb里winsock里有很多自己定义好的事件比如,winsock1_datarive()  当对方发送数据来时会自动触发这个事件,我只要在这个事件里写就好了,请问c#里socket有这些事件吗>?
谢谢,
还有,那位高手可以给个连接的简单例子呢,就是有listen和connect语句就好,刚开始接触不知道从那里插手,谢谢了。

解决方案 »

  1.   

    http://blog.csdn.net/yeerh/archive/2006/10/04/1320265.aspx
      

  2.   

    public void EstablishSocket()
            {
                IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
                IPAddress ipAddress = ipHostInfo.AddressList[0];         
                IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 9000);
                try
                {
                    Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    listener.Bind(localEndPoint);
                    while (true)
                    {
                        Thread.Sleep(10);
                        listener.Listen(0);
                        Socket sendSocket = listener.Accept();
                        if (sendSocket.Connected)
                        {    
                            SocketHT.Add(sendSocket.Handle, sendSocket);
                            Console.WriteLine("Connected!");
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }
      

  3.   

    Socket虽然封装了很多细节,但还没细到提供那些事件,不过这样编程的时候更有灵活性你可以自己定义事件来做,达到同样的效果,当然你也可以根据自己的需要来做成控件的形式不过个人不推荐把VB6时代的WINSOCK控件带到.NET中来,这样会发生很多意想不到的问题,而且很多是VB6根本就不会存在但在.NET会出现问题http://www.51.com/show_photo.php?id=100002069&user=sharedpoint
    我以前曾为了做这个东西,用WINSOCK控件来做,做到快吐血,要考虑数据的大小啦,还有延迟啦,真TMD的麻烦
      

  4.   

    可以先看csdn中關於socket的介紹
      

  5.   

    呵呵 ,看了大家的回复真的很感谢,我自己尽量的试下,但是要把vb的那东西真的很难的,因为思维定式的关系,现在我一想到接受数据就想到那个接收事件,呵呵,努力改正,
    因为现在不忙,所以想学c#,但是觉得只看书和做上面的例子没有太大的收获,所以想自己给自己弄点活干,看来也不容易啊,谢谢大家,
      

  6.   

    郁闷中,没有听楼上的话,在c#中继续用winsock控件做,郁闷啊,连一个发送信息也郁闷,类型总是不正确,c#对语法要求也太严格了,而vb就没有这些要求,继续努力中。