请问这些代码如何改写成为多线程?

来源:百度知道 编辑:UC知道 时间:2024/06/23 07:41:44
我写了一个同步socket监听的服务器端程序,但查阅了资料,知道必须使用多线程才能是程序的并发处理能力增强。代码我已经完全附下了,请各位前辈指点一下如何将代码改写为多线程。谢谢!

public delegate void TextShowHandeler(string Message);
public static string data = null;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Thread s = new Thread(new ThreadStart(StartListening));
s.IsBackground = true;
s.Start();
}

public void StartListening()
{
byte[] bytes = new Byte[1024];
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("192.168.10.123"), 7777);
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
listener.Bind(localEndPoint);

程序结构混乱,不好更改,建议这样重写。
用一个线程进行监听,主题代码这样
while (true) {
Socket client = listener.Accept();
//这里创建添加创建新线程进行通信。或使用异步socket如下
stateobject so=new stateobject;
so.client=client;
client.BeginReceive(so.buffer, 0, so.buffer.length, SocketFlags.None, new AsyncCallback(receiveprocess),so);
//如果你不熟悉异步socket的使用你还是使用创建新线程专门负责通信吧
}
//还是按照异步socket的方法来说吧。

void AsyncCallback(IAsyncResult ar){
stateobject so=(stateobject)ar.AsyncState ;
int recvbytes=so.clent.EndReceive(ar);
string txt=Encoding.ASCII.GetString(so.buffer, 0, so.buffer.length);

TextShowHandeler tsh = new TextShowHandeler(Appendtext);
tsh("返回数据"+txt.ToUpper());
/*这里添加你要做的应答等其他操作代码*/
if (recvbytes>0)//没有断线继续接收
client.BeginReceive(so.buffer, 0, so.buffer.length, SocketFlags.None, new AsyncCallback(receiveprocess),so);

}

大致结构这样写,不清楚请给我留言