1

I want to test my server, so i execute N clients in my computer. The problem is that the first client works but the others' connections were lost and their sockets were closed immediately!!!!!! Any idea how can I resolve this problem???

this is my code:

Server:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.IO;
using System.Diagnostics;
namespace server
{
    public partial class server : Form
    {
        public static byte[] data;
        public static byte[] data1;
        public static Socket sock;
        public delegate void operation(string s);
        public delegate void operation2();
        public delegate bool verifier();
        public server()
        {InitializeComponent();
          this.Show();
            sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPAddress adress = IPAddress.Parse("127.0.0.1");
            IPEndPoint iep = new IPEndPoint(adress, 4000);
            EndPoint ep = (EndPoint)iep;
            sock.Bind(iep);
            sock.Listen(1000);
            sock = sock.Accept();
            Thread lis = new Thread(listenning);
            lis.Start();
          }
        public void listenning()
        {
            data1 = new byte[1024];
            data = new byte[1024];
        repeter: 
            while (sock.Receive(data) > 0)
            {
                 String s = ASCIIEncoding.ASCII.GetString(data);
                if (this.InvokeRequired) Invoke((operation)effectuer4, s);
                else effectuer4(s);
                goto repeter;
              }
        }
        private void effectuer(String s)
        {
            textBox1.Text += "serveur:  " + s + "\r\n";
              message.Text  = "";
        }
        private void effectuer4(String s)
        {
            textBox1.Text += "Client:  " + s + "\r\n"; message.Text = "";
        }
      private void buttonDisconnect_Click(object sender, EventArgs e)
        {
            sock.Close();
            Application.Exit();
             }
    private void buttonSend_Click(object sender, EventArgs e)
        {
           String s = message.Text ;
            data1 = System.Text.Encoding.ASCII.GetBytes(s);
              sock.Send(data1);Invoke((operation)effectuer, s);
           }
        }
     }

Client:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.IO;
using System.Diagnostics;
using System.Threading;
using System.Net;
using System.Xml;
namespace client
{
    public partial class Form1 : Form
    {
        public static TcpClient SocketPourClient = null;
        public static string ClientMessage;
        public static string ServerMessage;
        Socket sock;
        public static byte[] data;
        public static byte[] data1;
        public delegate void operation(String s);
        public delegate void lancer();
        public delegate bool verifier();
        public IPEndPoint ipEnd = null;
        public int Num = 1;
        public Form1(string ip, int port)
        {
            InitializeComponent();
                   IPAddress adress = IPAddress.Parse("127.0.0.1");
                     ipEnd = new IPEndPoint(adress, 4000);
                  sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                  sock.Connect(ipEnd);
                  Thread th = new Thread(listenning);
                  th.Start();
        }
        public void listenning()
        {
            try
            {

                data = new byte[1024];

             repeter: 
            if (sock.Receive(data) > 0)
            {

                String s = ASCIIEncoding.ASCII.GetString(data);
                if (this.InvokeRequired) Invoke((operation)effectuer4, s);
                else effectuer4(s);
                goto repeter;

            }
            }
            catch (SocketException e)
            {
                MessageBox.Show(e.ToString());
                sock.Close();
            }

        }


  private void effectuer(String s)
    {
        textBox1.Text += "client:  " + s + "\r\n";
      message.Text = "";
    }
   private void effectuer4(String s)
     {
         textBox1.Text += "Server:  " + s + "\r\n";
         message.Text = "";
       }
 private void buttonDisconnect_Click(object sender, EventArgs e)
    {
        sock.Close();
        Application.Exit();
    }
private void buttonSend_Click_1(object sender, EventArgs e)
    {
        String s = message.Text ;
        data1 = System.Text.Encoding.ASCII.GetBytes(s);
        sock.Send(data1);
        Invoke((operation)effectuer, s);
      }
    }
}

Any idea how I can execute N clients in the same machine with the same socket?

3
  • 4
    Are you using gotos? I think I might cry. Commented Apr 28, 2012 at 17:47
  • goto's that go from the end of a loop to the start of it? Commented Apr 28, 2012 at 17:59
  • yes goto do this, but it is not recommended i can replace it . Commented Apr 28, 2012 at 18:16

1 Answer 1

1

In server code you call sock = sock.Accept(); only once. Move this code to a thread and surround it with while(true). You may also want to process the client's request in other threads.

Sign up to request clarification or add additional context in comments.

1 Comment

i do this : Thread li = new Thread(accepting); li.Start(); Thread lis = new Thread(listenning); lis.Start(); } public void accepting() { while (!sock.Connected) { sock = sock.Accept(); } } but an exception appeared: socket is closed and the condition (while (sock.Receive(data) > 0)) has problem

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.