第一次连接服务端进行通信是没问题的,问题出在当了客户端从新开的时候,只能连接成功!`但发信息服务端没响应大家知道问题出在哪里么??

解决方案 »

  1.   

    这里服务端代码:
                int point = 2000;
                string host = "127.0.0.1";            IPAddress ip = IPAddress.Parse(host);
                IPEndPoint ipe = new IPEndPoint(ip, point);            Socket sk = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                sk.Bind(ipe);
                sk.Listen(0);            Console.WriteLine("等客户端连接...");            ///接受到client连接,为此连接建立新的socket,并接受信息
                Socket temp = sk.Accept();//为新建连接创建新的socket
                Console.WriteLine("建立连接");
                string recvStr = "";
                byte[] recvBytes = new byte[1024];
                int bytes;
                bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
                recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
                /**/
                ///给client端返回信息
                Console.WriteLine("server get message:{0}", recvStr);//把客户端传来的信息显示出来
                string sendStr = "ok!Client send message successful!";
                byte[] bs = Encoding.ASCII.GetBytes(sendStr);
                temp.Send(bs, bs.Length, 0);//返回信息给客户端
      

  2.   

    问题太多了,怎么跟你说呢?挑最重要的说吧:1. Accept应该是针对网络上上万、上千万用户、随时从任意地方接入,当你为一个Accept客户接入时,同时必须能够为其它客户端会话接入。也就是说假设用两个客户端线程分配联系服务器,它们应该并行不分先后地获得服务器的响应。2. 一个客户端会话(即你的temp)所接收的消息的大小不是只能有1024个字节,例如1025个字节也应该正确接收,应该接收了一个信令的所有字节之后才执行 Encoding.ASCII.GetString() 语句。3. 为什么是 Encoding.ASCII编码?这应该明确有协议文档作出说明。4. 对于一个客户端会话(你的temp),必须知道什么时候是结束,即必须能够看到语句 temp.Close()。
      

  3.   

    对啊,你怎么没有循环啊
    bind,
    listen
    accept之后
    while(true)
    {
       s.receive();
       s.send();
    }
      

  4.   

    Listener实现的有点问题而且这段程序问题很多,要是接收数据包作为测试是可以的,但是要完整的实现数据文件传输是不行的。可以看看下面这个文章:http://www.cnblogs.com/borcala/archive/2008/01/22/1049255.html
      

  5.   


    嗯``我刚学所以很多东西都不知道`你有简单的demo么?`有的能发个给我么`谢谢!
    [email protected]