Can two threads use same socket?

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • selvialagar
    New Member
    • Apr 2008
    • 57

    Can two threads use same socket?

    I'm explain my problem..
    Code:
    sockWriter=new Sender();
    sockWriter->client =new TcpClient();
    sockWriter->client->Connect(this->hostName,this->port_number);   
    sockWriter->clientStream=sockWriter->client->GetStream();
    localSocketWriter=new Sender(this->sockWriter->clientStream);
    
    Thread *thread=new Thread(new ThreadStart(this,&platocomm::Listener));
    			thread->Name =S"Listener";
    			thread->Start();
    here is the sender class members
    Code:
                                                    BinaryWriter *writer;
    			TcpClient *client;
    			NetworkStream *clientStream;
    			static StreamWriter *fileWriter;
    			Sender(NetworkStream *clientStream);
    now i use the Listener to read data from the transport connection. My question is, can i use another thread , to read the data from the same trasport connection. When i tried this, it shows "a socket can not be accessed in a way forbidden by its access permissions". how to make this possible...plz suggest some solution for this..
  • IanWright
    New Member
    • Jan 2008
    • 179

    #2
    I've got a similar example for you below demonstrating how to go about it. Obviously however you'll not be using Binary Readers/Writers, and it looks like you're coding in C++, but it should get you there...

    Code:
    namespace Server  
     {  
        public class Server : System.Windows.Forms.Form  
        {  
           private Socket connection;  
           private Thread readThread;  
           private NetworkStream socketStream;  
           private BinaryWriter writer;  
           private BinaryReader reader;  
       
           public Server()  
           {  
              ...  
       
              // create a new thread from the server  
              readThread = new Thread( new ThreadStart( Run ) );  
              readThread.Start();  
           }  
       
           // allows a client to connect and displays the text it sends  
           public void Run()  
           {  
              TcpListener listener;  
       
              try  
              {  
                 // Create TcpListener and wait for connection  
                 listener = new TcpListener( 5000 );  
                 listener.Start();  
       
                 while ( true )  
                 {  
                    // Accept an incoming connection  
                    connection = listener.AcceptSocket();  
       
                    // create NetworkStream object associated with socket  
                    // and writers/reader for data transmission  
                    socketStream = new NetworkStream( connection );  
                    writer = new BinaryWriter( socketStream );  
                    reader = new BinaryReader( socketStream );  
       
                    // inform client that connection was successfull  
                    writer.Write( "SERVER>>> Connection successful" );  
       
                    string theReply = "";  
       
                    // Read String data sent from client  
                    do  
                    {  
                       try  
                       {     
                          theReply = reader.ReadString();  
                       }  
                       catch ( Exception )  
                       {  
                          break;  
                       }  
       
                    } while ( theReply != "CLIENT>>> TERMINATE" && connection.Connected );  
       
                    // Close connection  
                    writer.Close();  
                    reader.Close();  
                    socketStream.Close();  
                    connection.Close();  
                 }  
              }  
              catch ( Exception error )  
              {  
                 MessageBox.Show( error.ToString() );  
              }  
       
           }  
        }

    Comment

    Working...