Solved

Windows service listening on udp port

Posted on 2008-10-14
2
5,102 Views
Last Modified: 2013-12-17
I am trying to write a Windows service in C# that listens on a udp port, and starts a process depending on the message it receives.

Every time I start the service I get the error message:

A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied

I have tried to set up the udp socket in a number of different ways, but I cannot get past this error.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Net;
using System.Net.Mail;
using System.Net.Sockets;
using System.Threading;
using System.IO;
 
namespace MyService
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }
 
        protected override void OnStart(string[] args)
        {
            Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            int udpPort = 11000;
            IPEndPoint iep = new IPEndPoint(IPAddress.Any, udpPort);
            byte[] receiveBytes = new byte[15];
            try
            {
                sock.Bind(iep);
                IPEndPoint remoteEndpoint = new IPEndPoint(IPAddress.Any, 0);
                EndPoint ep = (EndPoint)remoteEndpoint;
                sock.BeginReceive(receiveBytes, 0, receiveBytes.Length, SocketFlags.None, new AsyncCallback(OnReceive), sock);
            }
            catch (SocketException ex)
            {
            }
        }
 
        protected override void OnStop()
        {
            sock.Close();
        }
 
        void OnReceive(IAsyncResult ar)
        {
            try
            {
                IPEndPoint ipeSender = new IPEndPoint(IPAddress.Any, 0);
                EndPoint epSender = (EndPoint)ipeSender;
                sock.EndReceiveFrom(ar, ref epSender);
                ASCIIEncoding enc = new ASCIIEncoding();
                string receiveString = enc.GetString(receiveBytes);
            }
            catch (Exception ex)
            {
            }
        }
    }
}

Open in new window

0
Comment
Question by:BRNIIT
2 Comments
 
LVL 26

Expert Comment

by:Anurag Thakur
ID: 22722524
the code posted is not complete
you cannot debug the service easily so its always better to write your code in a class and then call appropriate methods from OnStart and OnStop methods

anyways.... the Socket sock object will not be accessible from OnStop and OnReceive methods so make it a class level object
i could not find receivebytes methods so i had to comment that line and when i did these changes the code did not give me any errors

-- i was not able to test as i dont know how to send messages to UDP port.
0
 

Accepted Solution

by:
BRNIIT earned 0 total points
ID: 22727731
It seems that I am not able to do this with Sockets for some reason.  I tried it using UdpClient instead, and it works just fine.  So I will withdraw this question.
0

Featured Post

Secure Your Active Directory - April 20, 2017

Active Directory plays a critical role in your company’s IT infrastructure and keeping it secure in today’s hacker-infested world is a must.
Microsoft published 300+ pages of guidance, but who has the time, money, and resources to implement? Register now to find an easier way.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
VB.NET 2008 - Windows Protected Your PC 7 52
Easy filter aspnet 2 34
reading excel file in .net 2 30
Error building VS2105 solution from repository 1 33
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
This article shows how to deploy dynamic backgrounds to computers depending on the aspect ratio of display
After creating this article (http://www.experts-exchange.com/articles/23699/Setup-Mikrotik-routers-with-OSPF.html), I decided to make a video (no audio) to show you how to configure the routers and run some trace routes and pings between the 7 sites…
After creating this article (http://www.experts-exchange.com/articles/23699/Setup-Mikrotik-routers-with-OSPF.html), I decided to make a video (no audio) to show you how to configure the routers and run some trace routes and pings between the 7 sites…

713 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question