PDA

View Full Version : مشکل این برنامه سرور و کلاینت برای چت چیه؟



mammad_asir
پنج شنبه 03 آذر 1390, 14:24 عصر
در این برنامه میخوام چند تا کلاینت بتونه همزمان به سرور کانکت بشه و کلاینت ها پیامی رو برای سرور بفرستند و سرور هم جواب را برای همان کلاینت بفرسته یعنی حواب برای همه نره. واینکه میخواستم در ترید به richtextbox دسترسی داشته باشم که نشد چطور میشه؟

برنامه سمت سرور


namespace ts1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// string sBuffer;
int i = 0;
Socket[] mysocet = new Socket[10];
private TcpListener myListener;
private int port = 2020;
private void button1_Click(object sender, EventArgs e)
{

try
{
//گوش ایستادن روی پورت
myListener = new TcpListener(port);
myListener.Start();
Console.WriteLine("Web Server Running...... Press ^C to Stop......");
// استفاده از چند نخی برای پاسخ به چند پردازش همزمان
// Thread th = new Thread(new ThreadStart(StartListen));
// th.Start();
Thread th1 = new Thread(acp);
th1.Start();
}
catch (Exception)
{
Console.WriteLine("an err occured :" + e.ToString());
}
}
public void acp()
{

while (i<10)
{

//Accept a new connection
mysocet [i]= myListener.AcceptSocket();
if (i == 0)
{
Thread th = new Thread(new ThreadStart(StartListen));
th.Start();
}
else
{
if (!mysocet[i - 1].Connected)
{
Thread th = new Thread(new ThreadStart(StartListen));
th.Start();
}
}
i++;
}
}
public void StartListen()
{

while (true)
{
if (i == 1)
i--;
//Accept a new connection
// Socket mySocket = myListener.AcceptSocket();
// Console.WriteLine("Socket Type " + mySocket.SocketType);
if (mysocet [i].Connected)
{
// Console.WriteLine("\nClient Connected!!\n==================\nCLient IP {0}\n",
// mySocket.RemoteEndPoint);
 
 
//make a byte array and receive data from the client
Byte[] bReceive = new Byte[1024];
//int j =
mysocet[i].Receive(bReceive);

//Convert Byte to String
string sBuffer = Encoding.ASCII.GetString(bReceive);
// MessageBox.Show(sBuffer);
// richTextBox1.Text += sBuffer;

MessageBox.Show(sBuffer);
mysocet[i].Send(bReceive);
}

}
mysocet[i].Close();
}
private void button2_Click(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}

mammad_asir
پنج شنبه 03 آذر 1390, 14:56 عصر
برنامه سمت کلاینت


namespace c2
{
public partial class Form1 : Form
{
Socket sktClient;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
sktClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
sktClient.Connect("127.0.0.1", 2020);
textBox2.Text = "connected";
}
catch
{
MessageBox.Show("cannot connect");
}

/* string str = textBox1.Text;
byte[] buffer = Encoding.ASCII.GetBytes(str);
 
sktClient.Send(buffer);*/


// sktClient.Send(buffer);
// textBox2.Text += Encoding.ASCII.GetString(buffer);

 
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
try
{
string str = textBox1.Text;
byte[] Sbuffer = Encoding.ASCII.GetBytes(str);
sktClient.Send(Sbuffer);
}
catch
{
MessageBox.Show("problem in the program");
}
string Rstr;
byte[] Rbuffer = new byte[500];
sktClient.Receive(Rbuffer);
Rstr = Encoding.ASCII.GetString(Rbuffer);

richTextBox1.Text += Rstr;
richTextBox1.Text += "\n";

this.Refresh();
}

private void button3_Click(object sender, EventArgs e)
{
sktClient.Close();
}
}
}