服务器端代码:
        private IPEndPoint ServerInfo;
        private Socket ServerSocket;        private void button_Start_Click(object sender, EventArgs e)
        {
            ServerSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            ServerInfo = new IPEndPoint(IPAddress.Any,Convert.ToInt32("6000"));
            ServerSocket.Bind(ServerInfo);
            ServerSocket.Listen(10);
            button_Stop.Enabled = true;
            button_Start.Enabled = false;
            MessageBox.Show("启动成功");
        }        private void button_Stop_Click(object sender, EventArgs e)
        {
            ServerSocket.Close();
            button_Start.Enabled = true;
            button_Stop.Enabled = false;
            MessageBox.Show("启动结束");
        }
客户端代码:
        private IPEndPoint ServerInfo;
        private Socket ClientSocket;
        private void button_Enter_Click(object sender, EventArgs e)
        {
            ServerInfo = new IPEndPoint(IPAddress.Parse("127.0.0.1"), Convert.ToInt32("6000"));
            try
            {
                ClientSocket.Connect(ServerInfo);
                MessageBox.Show("登录服务器成功");
                
            }
            catch
            {
                MessageBox.Show("登录服务器失败");
            }
        }
为什么连接不上????

解决方案 »

  1.   

    服务器Listen只是开始侦听,如要接受连接还需要Accept。
      

  2.   

      // 为新建连接创建新的Socket实例
        Socket s_Accept = socket.Accept();
      

  3.   


    using System.Net;
    using System.Net.Sockets;
    using System.Threading;
    namespace Server
    {
        public partial class ServerMain : Form
        {
            public ServerMain()
            {
                InitializeComponent();
            }        Socket ServerSocket;
            IPEndPoint ServerInfo;        Thread ServerThread;        Socket[] ClientSocket;
            int ClientNumb;        byte[] RecieveByte;        private void button_Star_Click(object sender, EventArgs e)
            {
                ServerInfo = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000);
                ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                ServerSocket.Bind(ServerInfo);
                ServerSocket.Listen(10);            ClientSocket = new Socket[100];
                ClientNumb = 0;
                RecieveByte=new byte[65535];            //RecieveAccept();
                ServerThread = new Thread(RecieveAccept);
                ServerThread.Start();
                CheckForIllegalCrossThreadCalls = false;//不捕获对错误线程的调用
            }        public void RecieveAccept()
            {
                while (true)
                {                //MessageBox.Show((ClientNumb+1).ToString());
                    ClientSocket[ClientNumb] = ServerSocket.Accept();
                    MessageBox.Show((ClientNumb + 1).ToString());
                    this.listBox_State.Items.Add("有一个连接");                int ByteNumbe;
                    ByteNumbe = ClientSocket[ClientNumb].Receive(RecieveByte, RecieveByte.Length, 0);
                    this.textBox_Message.Text = Encoding.Unicode.GetString(RecieveByte);                ClientNumb++;
                    MessageBox.Show((ClientNumb + 1).ToString());
                }
            }        private void button_Stop_Click(object sender, EventArgs e)
            {
                ServerSocket.Close();
                listBox_State.Items.Add("服务停止");
            }
        }
    }第一次连接服务端进行通信是没问题的,问题出在当了客户端从新开的时候,只能连接成功!`但发信息服务端没响应???????
      

  4.   

    这样写应该是对的
    Socket ClientSocket = new Socket[100];这样不好吧。
    可以在while(true)里每次都new一个socket。
    还有服务端最好用异步
      

  5.   

    楼主,5楼的建议是正确的,只有异步才能达到一般需求,你要代码,我可以给你一些,不过是刚刚随便写的,你可以参考一下,另外,下面的代码最好把数组改为集合吧(List<>)
    public void RecieveAccept()
            {
                while (true)
                {
                    ClientSocket[ClientNumb] = ServerSocket.Accept();
                    ClientSocket[ClientNumb].BeginReceive(MsgBuffer, 0, MsgBuffer.Length, 0, new AsyncCallback(RecieveCallBack), ClientSocket[ClientNumb]);
                    ClientNumb++;
                }
            }        /// <summary>
            /// 回发数据给客户端
            /// </summary>
            /// <param name="AR"></param>
            public void RecieveCallBack(IAsyncResult AR)
            {
                try
                {
                    Socket RSocket = (Socket)AR.AsyncState;
                    int REnd = RSocket.EndReceive(AR);
                    string msg = Encoding.Unicode.GetString(MsgBuffer);
                    if (msg.IndexOf("系统: ") == 0)
                    {
                        //获取用户名
                        //添加到列表
                        //发送系统消息
                        Clientname[ClientNumb - 1] = msg.Substring(4, msg.IndexOf("进入系统") - 4).Trim();
                        for (int i = 0; i < ClientNumb; i++)
                        {
                            if (ClientSocket[i].Connected)
                            {
                                ClientSocket[i].Send(MsgBuffer, 0, REnd, 0);
                            }
                            RSocket.BeginReceive(MsgBuffer, 0, MsgBuffer.Length, 0, new AsyncCallback(RecieveCallBack), RSocket);
                        }
                    }
                    //分析出发信人和收信人
                    if (msg.Contains("对") || msg.Contains("说:"))
                    {
                        receivename = msg.Substring(msg.IndexOf("对") + 1, msg.IndexOf("说:") - msg.IndexOf("对") - 1);
                        sendname = msg.Substring(0, msg.IndexOf("对"));                    for (int i = 0; i < ClientNumb; i++)
                        {
                            if (Clientname[i].Equals(sendname))
                            {
                                ClientSocket[i].Send(MsgBuffer, 0, REnd, 0);
                            }
                            if (Clientname[i].Equals(receivename))
                            {
                                ClientSocket[i].Send(MsgBuffer, 0, REnd, 0);
                            }                        RSocket.BeginReceive(MsgBuffer, 0, MsgBuffer.Length, 0, new AsyncCallback(RecieveCallBack), RSocket);
                        }
                    }
                }
                catch (System.Exception e)
                {
                    using (StreamWriter sw = new StreamWriter("text.txt", true))//为true追加文本里的内容
                    {
                        sw.WriteLine(e.Message + DateTime.Now.ToString());
                    }
                }
            }