积极答复者
Socket发送问题

问题
-
public void StartListening()
{
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse(_ipAddr), _port);
listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
listener.Bind(localEndPoint);
listener.Listen(100);
while (!disposedValue)
{
Signal.Reset();
listener.BeginAccept(new AsyncCallback(AcceptCallback), listener);
Signal.WaitOne();
}
}
catch (Exception ) {}
}private void AcceptCallback(IAsyncResult ar)
{
byte[] buffer = new byte[1024];
Socket listener = (Socket)ar.AsyncState;
Socket handler = null;
try
{
handler = listener.EndAccept(ar);
buffer = Encoding.Unicode.GetBytes("Hello!");
handler.Send(buffer, 0, 1024, 0);}
catch (Exception ) {}finally
{
if (Signal != null)
{
Signal.Set();
}
}为什么执行到handler.Send(buffer, 0, 1024, 0);的时候会触发异常,提示“显示指定的参数已超出有效值的范围。\r\n参数名: size” ?
答案
-
是的,我已查出原因,buffer的长度在执行buffer = Encoding.Unicode.GetBytes("Hello!");时发生了改变,
将那语句改为Encoding.Unicode.GetBytes("Hello!").CopyTo(buffer, 0);就可以了
- 已建议为答案 Zhanglong WuMicrosoft contingent staff, Moderator 2016年2月22日 1:37
- 已标记为答案 MarvinKung 2016年2月22日 7:05
全部回复
-
你好,
以下几种情况会导致这种错误,根据你的代码,应该是第四种情况,改一下你的size变量值,在测试一下。
1.offset 小于 0。
2.offset 大于 buffer 的长度。</sentencetext>
3.size 小于 0。</sentencetext>
4.size 大于 buffer 的长度减去 offset 参数的值。</sentencetext>
https://msdn.microsoft.com/zh-cn/library/4t14718h(v=vs.110).aspx
Best regards,
Cole Wu- 已编辑 Zhanglong WuMicrosoft contingent staff, Moderator 2016年2月19日 9:58
-
是的,我已查出原因,buffer的长度在执行buffer = Encoding.Unicode.GetBytes("Hello!");时发生了改变,
将那语句改为Encoding.Unicode.GetBytes("Hello!").CopyTo(buffer, 0);就可以了
- 已建议为答案 Zhanglong WuMicrosoft contingent staff, Moderator 2016年2月22日 1:37
- 已标记为答案 MarvinKung 2016年2月22日 7:05