第一个问题,我试验过了,在我的机器上运行地很好,没有问题啊.
client端可以连n次...
第二个问题...我也试过了,不仅可以catch到,而且可以break.你地
机器好奇怪哦呵呵.
顺便,socket有个属性connected可以用来判断是否处于连接状态.

解决方案 »

  1.   

    算了算了,我就是不行啊?
    你们是粘贴了上面两段代码吗?不是下面那个用socket写的客户端哦!
    我想破头都不知道为什么,不知道是不是我的笔记本没联在局域网中,我原来是在校网中配置了的。不管了,我把服务器那一段改了,凑乎着用。我把第二个while改成
    while(s.connected)
    {
    try
    {
    s.Receive(RecvBytes,RecvBytes.Length,0);
    }
    catch
    {
    break;
    }
    try
    {
    s.Send(RecvBytes,RecvBytes.Length,0);
    }
    catch
    {
    break;
    }
    RecvBytes=new byte[256];
    }给分了,谢谢各位!
    ps:请问各位,c#里有像setnull这种东西吗?就想把上面的RecvBytes里的东西全部清掉。
      

  2.   

    我写的,给你看一下
     //这里是发送的                     
                                    listener = new TcpListener(port);
    listener.Start();
    statusBarPanel1.Text = "开始监听......";
    Thread thread = new Thread(new ThreadStart(receive));
    thread.Start();             private void receive()
    {
    sock = listener.AcceptSocket();
    if(sock.Connected)
    {
    statusBarPanel1.Text = "与客户建立连系....";
    string str = richTextBox1.Text;
    byte [] bytee = System.Text.Encoding.BigEndianUnicode.GetBytes(str.ToCharArray());
    sock.Send(bytee,0,bytee.Length,0);
    //接受信息
    while(!control)
    {
    NetworkStream stream = new NetworkStream(sock);
    byte [] by = new Byte[1024];
    int i = sock.Receive(by,by.Length,0);
    string ss = System.Text.Encoding.BigEndianUnicode.GetString(by);
    richTextBox2.AppendText(ss);
    j = richTextBox1.Lines.Length;
    if(j>= 2)
    {
    //如果不是@@@@@@@
    if(richTextBox2.Lines[j-2].ToString() !=" @@@@@@")
    {
    filestream  = new FileStream(richTextBox2.Lines[j-2].ToString(),FileMode.Open,FileAccess.Read);
    //读文件
    byte [] bb = new byte[1024];
    while ((number = filestream.Read(bb,0,1024) ) != 0)
    {
    stream.Write(bb,0,number);
    stream.Flush();
    }
    //文件发送完成送EOF
    string st ="<EOF>";
    byte [] byt = new byte[1024];
    byt = System.Text.Encoding.ASCII.GetBytes(st.ToCharArray());
    sock.Send(byt,0,byt.Length,0);
    filestream.Close();
    }//if@@@@@@
    else if(richTextBox2.Lines[j-2].ToString() == "@@@@@@")
    {
    control = true;
    }
    }//if(>=2)
    }
    }//if(sock.Connected)
    }
    //这里是接收端的
    private void connectFuWu()
    {
    int port = 0;
    IPAddress myIP = IPAddress.Parse("127.0.0.1");
    try
    {
    myIP = IPAddress.Parse(textBox2.Text);
    }
    catch 
    {
    MessageBox.Show("你输入的IP地址格式不正确");
    }
    try
    {
    port = Int32.Parse(textBox3.Text);
    }
    catch 
    {
    MessageBox.Show("请输入整数。");
    }
    try
    {
    if(textBox1.Text != ""&&textBox2.Text=="")
    {
    client.Connect (textBox1.Text,port);
    statusBarPanel1.Text = "与服务器建立连接";
    //获取网络流
    netStream = client.GetStream();
    byte [] bb = new byte[6400];
    //读数据(服务器文件名)
    i = netStream.Read (bb,0,6400);
    string ss = System.Text.Encoding.BigEndianUnicode.GetString (bb);
    richTextBox1.AppendText(ss);
    int j = richTextBox1.Lines.Length;
    for(int k =0;k<j-1;k++)
    {
    comboBox1.Items.Add(richTextBox1.Lines[k]);
    }
    comboBox1.Text = comboBox1.Items[0].ToString();
    }
    if(textBox1.Text == ""&&textBox2.Text != "")
    {
    client.Connect(myIP,port);
    statusBarPanel1.Text = "与服务器建立连接";
    //获取网络流
    netStream = client.GetStream();
    byte [] bb = new byte[6400];
    //读数据(服务器文件名)
    i = netStream.Read (bb,0,6400);
    string ss = System.Text.Encoding.BigEndianUnicode.GetString (bb);
    richTextBox1.AppendText(ss);
    int j = richTextBox1.Lines.Length;
    for(int k =0;k<j-1;k++)
    {
    comboBox1.Items.Add(richTextBox1.Lines[k]);
    }
    comboBox1.Text = comboBox1.Items[0].ToString();
    }
    if(textBox1.Text !=""&&textBox2.Text !="")
    {
    client.Connect(myIP,port);
    statusBarPanel1.Text = "与服务器建立连接";
    //获取网络流
    netStream = client.GetStream();
    byte [] bb = new byte[6400];
    //读数据(服务器文件名)
    i = netStream.Read (bb,0,6400);
    string ss = System.Text.Encoding.BigEndianUnicode.GetString (bb);
    richTextBox1.AppendText(ss);
    int j = richTextBox1.Lines.Length;
    for(int k =0;k<j-1;k++)
    {
    comboBox1.Items.Add(richTextBox1.Lines[k]);
    }
    comboBox1.Text = comboBox1.Items[0].ToString();
    }
    }
    catch(Exception err)
    {
    MessageBox.Show(err.Message);
    }
    }
    //你可以把filestream换成图形就可以了
    System.Drawing
    Graphics g;g = this.CreateGraphics();