目前有2个固定客户端
要做个服务端为中转站
把客户端1发送的信息通过服务端发送给客户端2
此过程不可逆转
要判断服务端接收到的是否是客户端1发过来的信息,然后再发送给客户端2。
目前已经实现了客户端1发送到服务端,
请问如何在服务端内做判断再发送给客户端2客户端1 public class Sco
        {
            string id;//按钮ID            public string Id
            {
                get { return id; }
                set { id = value; }
            }
            Socket socketIp;            public Socket SocketIp
            {
                get { return socketIp; }
                set { socketIp = value; }
            }
        }
        private void Sending(IAsyncResult rec_socket)
        {
            Sco s = new Sco();
            s = (Sco)rec_socket.AsyncState;
            try
            {
                if (s.SocketIp.Connected)
                {
                    byte[] msgBuff = Encoding.UTF8.GetBytes(s.Id);
                    s.SocketIp.Send(msgBuff);
                }
                else
                {
                    Console.WriteLine("Error!", "Error!");
                }
            }
            catch
            {
                Console.WriteLine("Error!", "Error!");
            }        }
        private void button1_Click(object sender, EventArgs e)
        {
            Sco s = new Sco();
            s.Id = ((Button)sender).Text;
            IPEndPoint epServer = new IPEndPoint(IPAddress.Parse("192.168.2.23"), 9000);
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            s.SocketIp = socket;
            socket.BeginConnect(epServer, new AsyncCallback(Sending), s);
        }

解决方案 »

  1.   

    服务端 private void Form1_Load(object sender, EventArgs e)
            {
                IPEndPoint epServer = new IPEndPoint(IPAddress.Parse("192.168.2.23"), 9000);
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Bind(epServer);
                socket.Listen(10);
                socket.BeginAccept(new AsyncCallback(RecVing), socket);
            }
            private delegate void server_invoke(string invokefun);
            private void RecVing(IAsyncResult rec_socket)
            {
                string cmdstr = "";
                Socket sc = (Socket)rec_socket.AsyncState;
                Socket socket = sc.EndAccept(rec_socket);
                byte[] bytes = new byte[1024];
                int i = socket.Receive(bytes);
                cmdstr = Encoding.UTF8.GetString(bytes, 0, i);
                showstrs(cmdstr);
                sc.BeginAccept(new AsyncCallback(RecVing), sc);
            }
            private void showstrs(string recv_strs)
            {
                if (recv_strs.Length != 0)
                {
                    if (this.InvokeRequired)
                    {
                        server_invoke invoke = new server_invoke(showstrs);
                        this.Invoke(invoke, (object)recv_strs);
                    }
                    else
                    {
                        textBox1.Text = recv_strs;
                        Console.WriteLine(recv_strs);
                    }
                }
            }
      

  2.   

    服务端 private void Form1_Load(object sender, EventArgs e)
            {
                IPEndPoint epServer = new IPEndPoint(IPAddress.Parse("192.168.2.23"), 9000);
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Bind(epServer);
                socket.Listen(10);
                socket.BeginAccept(new AsyncCallback(RecVing), socket);
            }
            private delegate void server_invoke(string invokefun);
            private void RecVing(IAsyncResult rec_socket)
            {
                string cmdstr = "";
                Socket sc = (Socket)rec_socket.AsyncState;
                Socket socket = sc.EndAccept(rec_socket);
                byte[] bytes = new byte[1024];
                int i = socket.Receive(bytes);
                cmdstr = Encoding.UTF8.GetString(bytes, 0, i);
                showstrs(cmdstr);
                sc.BeginAccept(new AsyncCallback(RecVing), sc);
            }
            private void showstrs(string recv_strs)
            {
                if (recv_strs.Length != 0)
                {
                    if (this.InvokeRequired)
                    {
                        server_invoke invoke = new server_invoke(showstrs);
                        this.Invoke(invoke, (object)recv_strs);
                    }
                    else
                    {
                        textBox1.Text = recv_strs;
                        Console.WriteLine(recv_strs);
                    }
                }
            }
      

  3.   

    ding
    两个客户端先向服务端发个请求,然后服务器端记录两IP信息,这样两个客户端就能通信了。