我試圖在服務器收到「調試」時將數據發送回客戶端。 ATM下文提供了這樣的錯誤:由於套接字未連接,發送或接收數據的請求被禁止 - 發送數據時
發送或接收數據的請求被不允許的,因爲在插座沒有被連接和供給,地址(使用sendto調用發送數據報套接字時)。
增加我的主類,以幫助答題
static Socket newSocket;
static byte[] data;
static EndPoint tmpRemote;
static IPEndPoint sender, endpoint;
static int recv;
static void Main(string[] args)
{
data = new byte[1024];
endpoint = new IPEndPoint(IPAddress.Any, 3000);
newSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
newSocket.Bind(endpoint);
sender = new IPEndPoint(IPAddress.Any, 904);
tmpRemote = (EndPoint)sender;
newSocket.BeginReceiveFrom(data, 0, data.Length, SocketFlags.None, ref tmpRemote, new AsyncCallback(OperatorCallBack), data);
Console.Read();
}
private static void OperatorCallBack(IAsyncResult ar)
{
log("[" + DateTime.Now + "][New Connection] " + tmpRemote.ToString() + "");
try
{
int size = newSocket.EndReceiveFrom(ar, ref tmpRemote);
if (size > 0)
{
data = (byte[])ar.AsyncState;
string[] dataCommand = Encoding.ASCII.GetString(data, 0, size).Split(' ');
if (dataCommand[0] == "debug")
{
newSocket.Send(Encoding.ASCII.GetBytes("HA IT WORKED :)"));
log("Sent debug");
}
else
{
log("Invalid Command");
}
}
data = new byte[1024];
newSocket.BeginReceiveFrom(data, 0, data.Length, SocketFlags.None, ref tmpRemote, new AsyncCallback(OperatorCallBack), data);
}
catch (Exception exp)
{
Console.WriteLine(exp.Message);
}
}
你不需要先打開一個套接字嗎? – 2013-02-18 18:53:47
@BlessedGeek如果這是問題的錯誤信息會有所不同。 – EJP 2013-02-18 22:55:53
@BlessedGeek我已將主要方法添加到代碼中以幫助回答任何問題。我相信這個插座是開放的。 – 2013-02-18 23:25:43