//创建单独的SOCKET通道来进行文件传输 
Socket socket = this.Createnewsocket(conn, _hostName, 5656);
this.Excutecmd(_CmdSocket, "stor " + files[i].Name + "\r\n");
string str2 = this.getmessagenumber(this.Recvmessage(_CmdSocket, conn));       #region 创建新的套接字连接
        private Socket Createnewsocket(string conn, string ip, int port)
        {
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect(ip, port);  
            return socket;
        } private string Recvmessage(Socket _CmdSocket, string conn)
        {
            string str = "";
            while (true)
            {
                byte[] buffer = new byte[0x200];
                _CmdSocket.ReceiveTimeout = 0x1d4c0;
                int count = 0;
                try
                {
                    count = _CmdSocket.Receive(buffer, buffer.Length, SocketFlags.None);
                }
                catch
                {
                    this.writelog(DateTime.Now.ToString() + "|服务器未响应|超时退出!|失败", conn);
                }
                str = str + Encoding.Default.GetString(buffer, 0, count);
                if (count < buffer.Length)
                {
                    try
                    {
                        char[] separator = new char[] { '\n' };
                        string[] strArray = str.Split(separator);
                        if (str.Length > 2)
                        {
                            str = strArray[strArray.Length - 2];
                        }
                        else
                        {
                            str = strArray[0];
                        }
                        if (!str.Substring(3, 1).Equals(" "))
                        {
                            return this.Recvmessage(_CmdSocket, conn);
                        }
                    }
                    catch
                    {
                    }
                    return str;
                }
            }
        }
       private string getmessagenumber(string meg)
        {
            string str = "";
            if (meg != "")
            {
                str = meg.Substring(0, 3);
            }
            return str;
        }这是客户端
当执行string str2 = this.getmessagenumber(this.Recvmessage(_CmdSocket, conn));  
调用 Recvmessage
执行到count = _CmdSocket.Receive(buffer, buffer.Length, SocketFlags.None);
到这就没反映了服务器以做了断口监听程序这是我在网上找到的代码。有什么方法解决呢

解决方案 »

  1.   

    如果没收到东西_CmdSocket.Receive()是一直阻塞的。到那没反应是不是发送失败,或者发送地址错了
      

  2.   


    private void BeginListen()
            {            IPAddress ServerIp = GetServerIP();            IPEndPoint iep = new IPEndPoint(ServerIp, 5657);            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            byte[] byteMessage = new byte[100];            this.label1.Text = iep.ToString();            socket.Bind(iep);            //            do            while (true)
                {                try
                    {                    socket.Listen(5);                    Socket newSocket = socket.Accept();                    newSocket.Receive(byteMessage);                    string sTime = DateTime.Now.ToShortTimeString();                    string msg = sTime + ":" + "Message from:";
                        msg += newSocket.RemoteEndPoint.ToString() + Encoding.Default.GetString(byteMessage);                    listBox1.Items.Add(msg); 
                    }                catch (SocketException ex)
                    {                    this.label1.Text += ex.ToString();                }            }            //            while(byteMessage!=null);        }这个服务器端的代码
    是不是一直在监听没有给客户端返回值呀。
    怎么写呀
      

  3.   

    我晚上8点之前给你看看,我也在搞socket。太忙了
      

  4.   

    http://topic.csdn.net/u/20080623/08/4bbd2475-45f1-42e3-a613-16b094759ade.html
      

  5.   

    你的服务器端代码这句newSocket.Receive(byteMessage);服务器并没有发给客户机数据啊,所以客户机receive()的时候一直等待,
    你的服务器应该有send操作,客户机和服务器都在等待接收数据,这不行啊。
    还有,你的listen别放在while里,应放在bind()之后
      

  6.   

    我看你是刚开始学socket吧,客户机那代码有点复杂了
    我这有个简单的,不难
    客户机
           private void button1_Click(object sender, EventArgs e)
            {
                Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("202.194.147.216"), 9000);
                s.Connect(ipep);
                string str = "i want to eat";
                byte[]data=new byte[1024];
                data = Encoding.ASCII.GetBytes(str);
                label1.Text = data.Length.ToString();
                s.Send(data, data.Length, SocketFlags.None);
                
            }
      

  7.   

    服务器
            public Form1()
            {
                InitializeComponent();
                Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9000);
                s.Bind(ipep);
                s.Listen(3);
                Socket server = s.Accept();
                byte[] data = new byte[1024];
                int m = server.Receive(data, 100, SocketFlags.None);
                label1.Text = Encoding.ASCII.GetString(data);
                label2.Text = m.ToString();
                //server.Receive(data);
            }