我搞过VB的网络编程,使用的是WINSOCKER控件来完成操作,使用起来感觉很简单,很多地方使用的事件。但在C#里面却出现了TcpClient类,TcpListener类和Socket类,我不太知道这几个类之间的关系,传输数据的原理。望高手指点。如果在FormClient窗体中定义了以下几个类:
TcpClient tc;
Socket sc;
TextBox tbc;    //文本框在FormServer窗体中定义了以下几个类
TcpListener ts;
Socket ss;
TextBox tbs;    //文本框如果需要将FormClient中的tbc中的文本传输到FormServer中的tbs文本框中,需要哪些步骤,请大侠写出详细过程。
例如:
1.  对象 = new 类(参数)  //注释
2.  对象.方法();     //注释
3.  对象.属性 = 值;  //注释

解决方案 »

  1.   


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

  2.   

    Socket比TcpClient更底层。一般用TcpClient就不用Socket了Server端的监听线程:
    TcpListener tcp=new TcpListener(5656);
    tcp.Start();
    while(true)
    {
    TcpClient t=tcp.AcceptTcpClient();
    Stream stream = t.GetStream();
    StreamReader reader = new StreamReader(stream);
    textBox2.AppendText(reader.ReadToEnd());
    }
    Client端发送:
    TcpClient tcpc=new TcpClient("127.0.0.1",5656);
    NetworkStream tcpstream=tcpc.GetStream();
    StreamWriter w=new StreamWriter(tcpstream);
    w.Write(msg);
    w.Flush();
    w.Close();
    tcpc.Close();
      

  3.   

    谢谢!
    上面的代码已经可以实现客户端将数据传输到服务器端。但是为什么要在服务器端写一个死循环?服务器端的窗口不能够被拖动,我在死循环中加了一个Application.DoEvents();才使窗口能显示内容。必须要写死循环吗?有没有更好的解决办法?
      

  4.   

    把循环监听的代码单独在一个线程中运行..就不会出现窗口不能拖动的问题...不用循环..还可用异步....
    tcp.BeginAcceptSocket()
      

  5.   

    引用
    ------------------------------------------------------------
    Server端的监听线程:
    TcpListener tcp=new TcpListener(5656);
    tcp.Start();
    while(true)
    {
    TcpClient t=tcp.AcceptTcpClient();    //此处程序阻塞,正在侦听,等待客户端连接时继续
    Stream stream = t.GetStream();
    StreamReader reader = new StreamReader(stream);   //此处读取数据时阻塞,直道连接断开时,程序才会继续textBox2.AppendText(reader.ReadToEnd());   }------------------------------------------------------------以上代码中有两次阻塞,第一次阻塞,只要客户端与其产生连接,程序就会继续运行,第二次阻塞时,不停读取数据流,必须断开连接时才能继续运行.这样一来要实现能互相聊天,就必须不停的连接与断开.有更好的办法解决吗?
      

  6.   

    算是个半异步传输的方法(服务器端)
    public bool Start()
    {
    try
       {
       TcpListener listener = new TcpListener(8888);
       listener.Start();
       listener.BeginAcceptTcpClient(new AsyncCallback(hlp_AsyncAcceptTcpClient), this);
        return true;
       }
       catch (Exception)
       {
         return false;
       }
    }
    protected void hlp_AsyncAcceptTcpClient(IAsyncResult ar)
    {
    TcpClient client  = listener.EndAcceptTcpClient(ar);
    hlp_BeginAccept();
             byte[] bytes = System.Text.Encoding.UTF8.GetBytes("要传的秋波");
    client.GetStream().Write(bytes, 0, bytes.Length);
             client.Close();
    }