我想在C#中创建一个UDP客户端和服务器,当我运行它们时,在第一次发送和接收消息之后,这个错误实现了。我的代码是:
byte[] barray = new byte[1024];
EndPoint ipre = new IPEndPoint(IPAddress.Any, 4040);
socketClint.Bind((IPEndPoint)ipre);
int rc = socketClint.ReceiveFrom(barray, ref ipre);
if (rc > 0)
{
listBox1.Items.Add("Server: "+ BitConverter.ToInt32(barray,0));
}
此错误大约是socketClint.Bind((IPEndPoint)ipre);
行。
错误是:
System.Net.Sockets.SocketException was unhandled
HResult=-2147467259
Message=An invalid argument was supplied
Source=System
ErrorCode=10022
NativeErrorCode=10022
StackTrace:
at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Bind(EndPoint localEP)
at client1.Form1.getmsg() in c:\Users\Inspiron 1545\Desktop\UDP\client1\client1\Form1.cs:line 38
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
答案 0 :(得分:0)
Winsock错误10022是WSAEINVAL
:
WSAEINVAL
10022参数无效。
提供了一些无效参数(例如,为setsockopt
函数指定了无效级别)。 在某些情况下,它还引用套接字的当前状态 - 例如,在未侦听的套接字上调用accept
。
在Winsock bind()
函数的上下文中(Socket.Bind()
在内部使用),它意味着:
WSAEINVAL
提供了无效参数。
如果套接字
s
已绑定到某个地址,则会返回此错误。
一旦套接字绑定到本地地址,您就无法将其重新绑定到新的本地地址。你应该只绑定它一次。
因此,在您的情况下,请仅在创建Bind()
后致电socketClint
。在每次致电socketClint.ReceiveFrom()
之前不要打电话给它。