0
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;
using System.Net.Sockets;
using System.IO;
using System.Threading;
namespace MultiClientServer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
TcpListener listner = new TcpListener(new IPEndPoint(IPAddress.Loopback, 8000));
listner.Start();
textBox1.Text += "Started TCP Server"+Environment.NewLine;
listner.BeginAcceptTcpClient(new AsyncCallback(Accept), listner);
}
void Accept(IAsyncResult result)
{
textBox1.Invoke(new MethodInvoker(delegate()
{
textBox1.Text += "Client Request Arrived" + Environment.NewLine;
}));
TcpListener listner1 = (TcpListener)result.AsyncState;
TcpClient client = listner1.EndAcceptTcpClient(result);
textBox1.Invoke(new MethodInvoker(delegate()
{
textBox1.Text += "Client Request Approved" + Environment.NewLine;
}));
Thread th = new Thread(new ParameterizedThreadStart(ContinueRcv));
th.Start(client);
}
void ContinueRcv(object obj)
{
TcpClient client = (TcpClient)obj;
StreamReader sr = new StreamReader(client.GetStream());
textBox1.Invoke(new MethodInvoker(delegate()
{
textBox1.Text += sr.ReadLine() + Environment.NewLine;
}));
}
}
}
我試圖讓這個應用程序,這樣,當一個客戶端連接不是一個新的線程將b創建,它將b在繼續接受.. BT是不是很遺憾.. PLZ給我的解決方案使用此代碼..意味着它不是一個類的要求或任何..我jux想知道如何做到這一點或以任何相關的方式..爲什麼我的線程不能連續工作
「客戶端」和「SR」不應該從recv線程作爲表單類的成員進行訪問,以開始。你需要在線程創建時將「客戶端」傳遞給線程,否則它很容易被另一個接收到的線程覆蓋。因爲類似的原因,'sr'應該是線程中的局部。 –
明白了..讓我檢查這個.. – rummykhan
我已經檢查沒有改變代碼..我可以做thix而在我的線程bt我不認爲這是一個很好的做法..你有什麼想法..? ? – rummykhan