void sent(System.Net.Sockets.Socket socket, statesaver stdsav) { string sentstr = String.Empty; byte[] buffer = new byte[1024 * 1024]; while (true) { Thread.Sleep(socketfreq); if (sentmsg.Count >= 1 && stdsav.set(9) == 1) { sentstr = sentmsg.Dequeue() as string; buffer = Encoding.UTF8.GetBytes(sentstr); try{ socket.Send(buffer); } catch (Exception) { Writered("\n\nConnection Failed"); while (true) { } } } } }
public void chatlaunch(System.Net.Sockets.Socket socket) { statesaver stdsav = new statesaver(); stringclass str = new stringclass(); Thread showth = new Thread(() => show(str, socket, stdsav)); showth.Start(); Thread inputth = new Thread(() => input(str, socket, stdsav)); inputth.Start(); Thread sentth = new Thread(() => sent(socket, stdsav)); sentth.Start(); Thread recvth = new Thread(() => recv(socket, stdsav)); recvth.Start(); }
void show(stringclass str, System.Net.Sockets.Socket socket, statesaver stdsav) { string recvstr = String.Empty; while (true) { Thread.Sleep(200); if (recvmsg.Count >= 1) { recvstr = recvmsg.Dequeue() as string; int forn; for (forn = 0; forn <= (str.set(@"@#").Length + 11); forn++) { Console.Write('\u0008'); } for (forn = 0; forn <= (str.set(@"@#").Length + 11); forn++) { Console.Write(" "); } for (forn = 0; forn <= (str.set(@"@#").Length + 11); forn++) { Console.Write('\u0008'); } // Console.WriteLine(""); if (recvstr == @"$%$filereq") { stdsav.set(0); Console.WriteLine("Recv => " + "FILE"); filerecvlaunch(socket); // Console.WriteLine("-------------------------------------------------set state to 1"); stdsav.set(1); } if (recvstr != @"$%$filereq") { Console.WriteLine("Recv => " + recvstr); } Console.Write("Edit => " + str.set(@"@#")); } } }
void recv(System.Net.Sockets.Socket socket, statesaver stdsav) { string recvstr = String.Empty; byte[] buffer = new byte[1024 * 1024]; int n = 1; int working = 1; while (working == 1) { Thread.Sleep(socketfreq); while (stdsav.set(9) == 0) { Thread.Sleep(200); } try{ if (stdsav.set(9) == 1) { //---------------------------------------------------------------------------------------问题等待解决:此receive抢包问题:进去时还是1,抢包时是0 //---------------------------------------------------------------------------------------目前代替方案:$%$recv/accpet包将会发送两次, //----------------------------------------------------------------------------------------------------下18行左右有内码包过滤代码,如解决,需删除 n = socket.Receive(buffer); // Console.WriteLine("-----Received with code "+stdsav.set(9).ToString()); } } catch (Exception) { Writered("\n\nConnection Failed"); while (true) { } working = 0; } recvstr = Encoding.UTF8.GetString(buffer, 0, n); if (recvstr != @"$%$accepted" && recvstr != @"$%$refused") { recvmsg.Enqueue((object)recvstr); } } }
void input(stringclass str, System.Net.Sockets.Socket socket, statesaver stdsav) { Console.Write("Edit => "); while (true) { char inputchar = Console.ReadKey().KeyChar; if (inputchar != '\r') { str.set(str.set(@"@#") + inputchar); } if (inputchar == '\r') { // if(inputstr!=String.Empty) // { if (str.set(@"@#") == filesendkeyword) { stdsav.set(0); Console.WriteLine("Sent => " + "FILE"); filesendlaunch(socket); // Console.WriteLine("-------------------------------------------------set state to 1"); stdsav.set(1); } if (str.set(@"@#") != filesendkeyword) { Console.WriteLine("Sent => " + inputstr); } sentmsg.Enqueue((object)str.set(@"@#")); // } // if(inputstr==String.Empty) // { // Console.WriteLine("--空内容--\n"); // } str.set(String.Empty); Console.Write("Edit => "); } } }