服务端:
public void AddString(string str)
{
this.listBox1.Items.Add(str);
this.listBox1.SelectedIndex = this.listBox1.Items.Count - 1;
} public void StartService()
{
int Threadnum = 0;
IPEndPoint ep = new IPEndPoint(IPAddress.Parse("192.168.0.8"),999);
serverSoc = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);
serverSoc.Bind(ep);
serverSoc.Listen(5);
AddString("Begin Listening..."); while(this.Isrun)
{
if(currthreadmax >= 5)
{
while(true)
{
Thread.Sleep(1000);
if(currthreadmax < 5)
break;
}
}
else
{
try
{
currthreadmax ++;
WorkSocket ws = new WorkSocket(serverSoc.Accept(),string.Format("THREAD {0}",++ Threadnum),this);
Thread td = new Thread(new ThreadStart(ws.run));
  td.Start();
Thread.Sleep(10);
}
catch{AddString("socket start error ");}
}
} } private void Form1_Load(object sender, System.EventArgs e)
{
Thread td = new Thread(new ThreadStart(StartService));
td.Start();
} private void button1_Click(object sender, System.EventArgs e)
{
AddString(currthreadmax.ToString());
}客户段:
private void button1_Click(object sender, System.EventArgs e)
{
for(int i = 0; i < 10; i ++)
{
Thread td = new Thread(new ThreadStart(Workclient));
td.Start();
}
}
public void Workclient()
{
while(true)
{
try
{
IPEndPoint ep = new IPEndPoint(IPAddress.Parse("192.168.0.8"),999);
Socket clientSoc = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);
clientSoc.Connect(ep);
if(clientSoc.Connected )
{
for(int i = 0; i < 2 ;i ++)
{
clientSoc.Send(System.Text.Encoding.ASCII.GetBytes("abc " + i.ToString() ));
Thread.Sleep(1000);
}
clientSoc.Send(System.Text.Encoding.ASCII.GetBytes("<EOF>"));
clientSoc.Shutdown(SocketShutdown.Both);
clientSoc.Close();
break;
}
}
catch
{
Thread.Sleep(1000);
}
}
}现在的思路是这样的,服务端只能同时有5个连接;这样出现了一个问题,第一开始的五个连接发送和接受数据正常,第二次开始的五个连接发送的三个数据包,在服务端一次就读到了,这是为什么,应该要三次才能读到的???

解决方案 »

  1.   

    服务端的:
    using System;
    using System.Net.Sockets;
    using System.Net;
    using System.Threading;
    using System.Windows.Forms;namespace FileTransfer
    {
    /// <summary>
    /// WordSocket 的摘要说明。
    /// </summary>
    public class WorkSocket
    {
    private Socket clientSoc;
    private string Threadname;
    private Form1 fr; public WorkSocket(Socket clientSoc,string Threadname, Form1 fr)
    {
    this.clientSoc = clientSoc;
    this.Threadname = Threadname;
    this.fr = fr;
    } public void run()
    {
    string str = "";
    while(true)
    {
    try
    {
    byte [] bytes = new byte[1024];
    clientSoc.Receive(bytes);
    str = "";
    str = System.Text.Encoding.ASCII.GetString(bytes);
    fr.AddString("thread " + Threadname + " " + str );
    Thread.Sleep(100);
    if(str.IndexOf("<EOF>")>-1)
    {
    break;
    }
    }
    catch{}
    }
    fr.currthreadmax --;
    }
    }
    }
      

  2.   

    好像fr还是别的计数的用static
      

  3.   

    to  conan19771130(柯南):是的,fr.currthreadmax只是记录当前有多少个连接工作。这个会有影响吗?
      

  4.   

    udp 画展程序 就是序列化的。
    使用xml
      

  5.   

    http://dev.csdn.net/develop/article/67/67496.shtm
    http://dev.csdn.net/develop/article/34/34112.shtm
      

  6.   

    http://dev.csdn.net/develop/article/27/27535.shtm