当前位置:编程学习 > C#/ASP.NET >>

Socket通信问题

用C#编写的 同步Socket通信接受数据不完整或接受不到,望知道的给与解答。
代码贴出来如下:
-------------------------------------             

                Socket s = null;
                IPEndPoint hostEndPoint;
                IPAddress hostAddress = IPAddress.Parse(setting.FrontForIP);
                int conPort = int.Parse(setting.FrontForPort);
                hostEndPoint = new IPEndPoint(hostAddress, conPort);

                // Creates the Socket to send data over a TCP connection.
                s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                // Connect to the host using its IPEndPoint.
                s.Connect(hostEndPoint);

                if (!s.Connected)
                {
                    s = null;
                }

                byte[] msg = Encoding.UTF8.GetBytes(xmlBW);
                byte[] bytes = new byte[1024 * 10];
                string resp = string.Empty;
                try
                {
                    // Blocks until send returns.
                    int byteCount = s.Send(msg, 0, msg.Length, SocketFlags.None);
                   
                    // Get reply from the server.
                    byteCount = s.Receive(bytes, 0, bytes.Length, SocketFlags.None);

                    int i = 0;
                    while (byteCount==0 && s.Available>0)
                    {
                        byteCount = s.Receive(bytes, 0, bytes.Length, SocketFlags.None);
                        if (i >= 4)
                            break;
                        i++;
                    }

                    if (byteCount > 0)//表示有返回
                    {
                        resp = Encoding.UTF8.GetString(bytes);
                    }
                    s.Close();
                    return resp;

                } --------------------编程问答--------------------
引用楼主 sdf33 的回复:
while (byteCount==0 && s.Available>0)


写错了吧?你是不是想写 != 呢? --------------------编程问答-------------------- 比如说:

   while (byteCount!=0 || s.Available>0)

--------------------编程问答-------------------- 还有啊,搞个循环一遍一遍地覆盖bytes数据,这又是什么意思呢?

另外最后的“Encoding.UTF8.GetString”显然不能从整个bytes数组里取值,它只应该取有效数据(长度等于byteCount个字节)。

唉,你最好删除了自己的程序,重新考虑逻辑。 --------------------编程问答--------------------   我这里弄个循环一遍一遍的取是有时候获取不到值,所以多次去获取,我对这方面的编程刚接触不久,如果有好的这方面的例子的,给个地址或发到我的邮箱里面  cs88217@qq.com。

   不过我后面在 byteCount = s.Receive(bytes, 0, bytes.Length, SocketFlags.None);
前面加上   Thread.sheep(350); 程序就能很好的接受返回,求解!!! --------------------编程问答-------------------- 既然你要接受数据,干嘛要弄个什么i,还》4之后就break。。。。。没搞明白,姑且当成你的业务需要。

支持2楼观点,byteCount==0表示的是对方server(通过代码,你这边怎么看都是client)关掉了对应的socket,因为数据传输完毕了,对方都已经close,并且shutdown了,你这时候再去循环有什么用。

补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,