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;
} --------------------编程问答--------------------
写错了吧?你是不是想写 != 呢? --------------------编程问答-------------------- 比如说:
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#