我的问题是这样的:     我现在是对串口进行通讯,其中涉及到了多线程优先级问题和参数传递问题,
     我想实现的效果:用户发送什么信息,服务器就返回给客户端什么信息
     当多个客户端通过Socket发送参数信息给服务器端,服务器端接受参数,如果这多个客户同时发送信息,
    服务器是如何区分这些参数是来自哪个用户的?

    
    备注:Socket客户端和服务器的单向通讯已经实现。     请各位帮帮忙,先谢过了

解决方案 »

  1.   

    还有ip号,端口号配合ip号,有什么不能区别的呢
      

  2.   

    端口号是肯定 听说过的。服务器中  包含B/S 和C/S的,现在就是在同一台机器上面,B/S与C/S通过Socket进行通讯的,
     当B/S端同时提交多个请求给C/S端时,C/S端如何一对一的把每个请求的信息返回给对应的用户?
      

  3.   

    举个例子吧:
        点击A按钮:  B/S中传递了参数A给 C/S
        点击B按钮:  B/S中传递了参数B给 C/S
        点击C按钮:  B/S中传递了参数C给 C/S
         
        我在C/S中每接受一个请求就生成一个线程,现在问题是:如何保证传递来参数一对一的传递给相应的线程呢?
      

  4.   

    再就是 如何保证传递给A线程的参数是A 而不会被B参数覆盖了呢?
      

  5.   

    Socket中可以通过本端IP+Port + 远端IP + Port + 协议可以确定一条链路.所以多个客户端会建立多个连接,每一个连接上你都需要提供一个数据缓冲区,从这个数据缓冲区获得数据几个,你可能需要维护一个客户端列表,这样不就可以知道是那一个了.
      

  6.   

    恩,麻烦您看一下4楼和5楼的问题,如何确保传递给A线程的参数是A 而不会被B参数覆盖了呢?
      

  7.   


    private void OnReceiveData(IAsyncResult ar)
            {
                Monitor.Enter(this);
                MySocket socket = ar.AsyncState as MySocket;
                if (socket == null || !socket.IsConnected)
                    return;
                int length = socket.Socket.EndReceive(ar);
                string msg = Encoding.UTF8.GetString(socket.Buffer,0,length);
                string[] strings = msg.Split(',');
                //参数设定流程,优先级为:1
                if (flag == "A")
                {
                    Thread pst = new Thread(new ThreadStart(Test1));
                    pst.Name = "Test1" + psFlag;
                    socket.SendMessage(strings[1]);
                }
                else if (flag == "B")
                {
                    Thread pst = new Thread(new ThreadStart(Test2));
                    pst.Name = "Test2" + psFlag;
                    socket.SendMessage(strings[1]);
                }假如A的参数socket.SendMessage(strings[1]);还没执行完,这时候B的参数传递过来了,那么A的参数会被B的参数覆盖,出现参数传递错位
      

  8.   

    不好意思上面代码写的不全面private void OnReceiveData(IAsyncResult ar)
            {
                Monitor.Enter(this);
                MySocket socket = ar.AsyncState as MySocket;
                if (socket == null || !socket.IsConnected)
                    return;
                int length = socket.Socket.EndReceive(ar);
                string msg = Encoding.UTF8.GetString(socket.Buffer,0,length);
                string[] strings = msg.Split(',');
                flag=strings[0];
                //参数设定流程,优先级为:1
                if (flag == "A")
                {
                    Thread pst = new Thread(new ThreadStart(Test1));
                    pst.Name = "Test1" + psFlag;
                    socket.SendMessage(strings[1]);
                }
                else if (flag == "B")
                {
                    Thread pst = new Thread(new ThreadStart(Test2));
                    pst.Name = "Test2" + psFlag;
                    socket.SendMessage(strings[1]);
                }
              Moniter.Exit(this)
           }
       
    假如A的参数socket.SendMessage(strings[1]);还没执行完,这时候B的参数传递过来了,那么A的参数会被B的参数覆盖,出现参数传递错位