Community discussion forum

Socket Programming in C# - Part 1

This is a comment thread discussing Socket Programming in C# - Part 1
  • 7 years ago

    I only speak a lite bit of english.


    I would like to know how to run the server and the client in the
    same computer to text my application before to start with two
    diferents computers.


    Thank Javier

  • 6 years ago
    hello my name hamza , my email hamzahwh@yahoo.com

    you can do client / server in the same computer by useing concept "localhost" if you send to my your program i will correct to you and send to you .

    and also i try to do multi client / server in c# programming if you can help my after .
  • 6 years ago

    When the Client tries to connect to a disconnected IP address, there is a long timeout of 23 seconds...
    How can we reduce this timeout?
    What is the method to control it?


    Thanks for help

  • 6 years ago

    Regarding blocking socket calls. Are u assuming .net does the polling. As no additional code has to be written for polling. So no need to return to main thread and a delegate also is not required.  


    Now consider in asynchronous mode, multiple clients are connected. Then the delegates for beginreceive will fire at will and when multiple fire at same time, it gets stacked as there only one thread. Then the last delegate to be fired will be processed and then down the stack. In fact if we need to sequence something, a lot of coding is involved. The flow also is not clear and criss crosses.


    Could you comment on the above. I have a req which needs sequential access of the messages and depends on a flow mapping of messages when there are multiple clients.  I been thinking async(with delegates) will be an overhead and confusing/complicated to implement.

  • 5 years ago

    Hi
    I am trying server request/response program using socket class. here i couldn't send headers with the request to the proxy server.when i send the request i should able to get the response from the server.
    if u have any idea please help me out.
    Regards
    request.



  • 5 years ago

    assalam-o-aleykum, im raheel from pakistan, and i want to know about client to client messanger, plz guide me. thanks. my mail raheel_s81@hotmail.com

  • 5 years ago
    When the Client tries to connect to a disconnected IP address, there is a long timeout of 23 seconds...
    How can we reduce this timeout?
    What is the method to control it?

    Thanks
  • 4 years ago

    there is aproblem meet me ,i designed aprogram simulate the work of credit card by designing two programs one used by auser and the other one for the administration and deal with database ,but when i put  the two program on different computer they are not work



    the tcplistner statement as follow:
                    listener = new TcpListener(1500);


    the tcpclient statement as follow:
    client = new TcpClient("192.168.1.1", 1500);
     


    since the "192.168.1.1" is the ip address of the machine that the server program run at

  • 4 years ago

    I am using Visual C# 2005. It turns out that there are some cross thread calls to forms controls which are flagged as unsafe when running under C# 2005.  I will post fixes to these a little later.  

  • 4 years ago

    Ok, here is the fix to make the samples work under C# 2005 without exceptions.


    In the SocketServer project modify the SocketServer class as follows:


    1.  Add the following delegate declaration:


           // This delegate enables asynchronous calls for setting
           // the text property on a TextBox control.
           delegate void AppendTextCallback(string text);


    2.  Add the following method:


           // If the calling thread is different from the thread that
           // created the TextBox control, this method creates a
           // AppendTextCallback and calls itself asynchronously using the
           // Invoke method.
           //
           // If the calling thread is the same as the thread that created
           // the TextBox control, the Text property is set directly.
           private void AppendRxText(string text)
           {
               // InvokeRequired required compares the thread ID of the
               // calling thread to the thread ID of the creating thread.
               // If these threads are different, it returns true.
               
               if (this.txtDataRx.InvokeRequired)
               {
                   AppendTextCallback d = new AppendTextCallback(AppendRxText);
                   this.Invoke(d, new object[] { text });
               }
               else
               {
                   txtDataRx.Text = txtDataRx.Text + text;
               }
           }


    3. Replace the OnDataReceived method with the following, or make the minor one line code change
    as commented in the method below if you prefer:
             public  void OnDataReceived(IAsyncResult asyn)
             {
       try
       {
             CSocketPacket theSockId = (CSocketPacket)asyn.AsyncState ;
             //end receive...
             int iRx  = 0 ;
             iRx = theSockId.thisSocket.EndReceive (asyn);
             char[] chars = new char[iRx +  1];
             System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
             int charLen = d.GetChars(theSockId.dataBuffer, 0, iRx, chars, 0);
             System.String szData = new System.String(chars);
                         // Old offending line
             //txtDataRx.Text = txtDataRx.Text + szData;
                         AppendRxText(szData);
             WaitForData(m_socWorker );
       }
       catch (ObjectDisposedException )
       {
            System.Diagnostics.Debugger.Log(0,"1","\nOnDataReceived: Socket has been closed\n");
       }
       catch(SocketException se)
       {
             MessageBox.Show (se.Message );
       }
              }

  • 3 years ago
    Hello spowens,

    Sir i am new to .Net and i want to create chatting software which can communicate over the internet too.
    I have searched a lot but the help which i found couldn't solve my problem. Please sir
    i have to complete my semester project of Bs(Computer Engineering) i need help.
    you can mail me the solution on my email dr_hunaindurrani@yahoo.com i will be great full to you.

    Thanks in advance
    Hunain Durrani.









  • 3 years ago
    I'm having Interoperability problems with a Java client. The Java Client connects to a TCP server application, and immediately sends some data, and closes the connection.
    After the client is connected, the server recieves only 1 byte of data.
    If I introduce a delay(Thread.Sleep, MBox, or a breakpoint),  between the OnClientConnect, WaitForData and OnDataReceived functions, I get complete data.
    This shouldn't happen logically. I'm wondering what might be the problem.






  • 3 years ago
    Hi,

     I want an application , where a single client using more than one server (Same Application running in more than one machines.).Client listening  to a single port for all the servers it connected to.
       Client application will receive huge data frequently. Server will process and send the data to client.
      As i want the application to be started first i made the main application as Server. Am i right.
     or Do we have option for passive Servers.

    With Thanks,
    Eswar

     

















  • 3 years ago
    all i haft to say is that this is a very informative tutorial and i'd recommend it to anyone who wants to try building socket based software in C#.

  • 2 years ago

    Hi,

           I want to develop an application in C# which is connecting to UNIX server throgh socket and execute Unix commands from c# application. Please send me any sample programe in C# which uses socket programming to connect to unix server and execute unix command. 

    thanks,

    Mak

     

  • 1 year ago
    sir, could you please help me regarding the socket programming beyond firewalls in .NET framework please send me the code required thanks and regards kancherlasravan
  • 1 year ago
    **Start using WCF service, much easier.**
  • 1 year ago
    The program run perfect but the two computers didn't be connected
  • 1 year ago
    Why I can't know?
  • 1 year ago
    Hi! i am making website in ASP.NET C# as my 3year project. I am using a feature to allow online users to play games among themselves. I am not getting how to do nor i am getting any games code in asp.net. Please help me if any one has the code and procedure how to integrate it in my website. Anticipating positive response. My email id is rahul_sirohi@daiict.ac.in
  • 1 year ago

    If u encounter a Cross-Threading problem u may need to do a little fix. Replace OnDataReceived function in the server side with that code:

    delegate void FixCallBack(IAsyncResult asyn);
        	public  void OnDataReceived(IAsyncResult asyn)
        	{
        		try
        		{
                    if (this.InvokeRequired) {
                        FixCallBack dd = new FixCallBack(OnDataReceived);
                        this.Invoke(dd, new object[] { asyn });
                    }
                    else {
                        CSocketPacket theSockId = (CSocketPacket)asyn.AsyncState;
                        //end receive...
                        int iRx = 0;
                        iRx = theSockId.thisSocket.EndReceive(asyn);
                        char[] chars = new char[iRx + 1];
                        System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
                        int charLen = d.GetChars(theSockId.dataBuffer, 0, iRx, chars, 0);
                        System.String szData = new System.String(chars);
    
                        txtDataRx.Text = txtDataRx.Text + szData;
                        WaitForData(m_socWorker);
                    }   			
        		}
        		catch (ObjectDisposedException )
        		{
        			System.Diagnostics.Debugger.Log(0,"1","\nOnDataReceived: Socket has been closed\n");
        		}
        		catch(SocketException se)
        		{
        			MessageBox.Show (se.Message );
        		}
        	}
    
  • 11 months ago

    hello I want to send an object with tcp socket ( a class that i made it). I see here that you r sending string (converted to byte array)

    How can i convert a class to byte array so i can send it with this socket???? (the winsock object in C# it takes an "object" parameter and it send it ,this socket can not take anything else except the byte array)

Post a reply

Enter your message below

Sign in or Join us (it's free).

Want to stay in touch with what's going on? Follow us on twitter or Facebook!