客户端:
namespace client
{
class Program
{
static void Main(string[] args)
{
Program fuck = new Program();
Thread newthread = new Thread(new ThreadStart(fuck.send));
newthread.Start(); } public void send()
{
Socket client = null;
byte[] buffer = new byte[1024];
string input = null;
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint eip = new IPEndPoint(ip, 8888); try
{
client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Console.WriteLine("ready to connect to the server.........");
client.Connect(eip);
}
catch (Exception eX)
{
Console.WriteLine("disconnected from the server.....");
Console.WriteLine(eX.Message);
Console.ReadLine();
Thread.CurrentThread.Abort();
} while (true)
{
Console.WriteLine("waiting sending..................");
input = Console.ReadLine();
if (input == "exit")
{
break;
}
else
{
Console.WriteLine("now sending ......");
client.Send(Encoding.ASCII.GetBytes(input));
Thread.Sleep(1000);
Console.WriteLine("finished.........."); } }
client.Close();
Console.WriteLine("game over");
Thread.CurrentThread.Abort();
}
}
}服务器端:
namespace consolesocket
{
class Program
{
static void Main(string[] args)
{
server js = new server();
Thread n = new Thread(new ThreadStart(js.fun));
n.Start();
}
} class server
{
public server()
{
} public void fun()
{
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint eip = new IPEndPoint(ip, 8888);
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server.Bind(eip);
server.Listen(5);
Console.WriteLine("start to listening......"); while (true)
{
Socket accepted = server.Accept();
Console.WriteLine("one client conected...........");
SocketProcess spc = new SocketProcess(accepted); Thread Data = new Thread(new ParameterizedThreadStart(DataProcess));
// Thread Line = new Thread(new ThreadStart(LineProcess(accepted))); Data.Start(accepted); //object类型参数
// Line.Start(); } }
public void DataProcess(object s)
{
Socket socket = (Socket)s;
Thread threadDataProcess = new Thread(new ThreadStart(new SocketProcess(socket).DataProce));
threadDataProcess.Start();
}
public void LineProcess(Socket s)
{
Thread threadLineProcess = new Thread(new ThreadStart(new SocketProcess(s).LineProce));
threadLineProcess.Start();
} }
class SocketProcess
{
Socket server;
private static int numOfconnection = 0;
public SocketProcess(Socket server)
{
this.server = server;
++numOfconnection;
Console.Write(string.Format("a new client conected it\'s number : {0}\n", numOfconnection));
} public void DataProce()
{
int i = 0;
byte[] buffer = new byte[1024]; Console.WriteLine(" start to receive ........");
Thread.Sleep(1000);
while (true)
{
// try
{
Console.WriteLine("\nlistening...........\n");
if ((i = server.Receive(buffer)) != 0)
{
string data = Encoding.ASCII.GetString(buffer);
if (data.Equals(" ")) data = "cao";
Console.WriteLine(data);
Console.WriteLine(" ........end"); }
}
// catch (Exception eX)
{
// Console.WriteLine(eX.Message);
// Console.Read();
}
}
server.Close();
Console.Write(string.Format("client {0} disconnected\n", numOfconnection--));
Console.Write(string.Format("{0} clients remains connected\n", numOfconnection)); } public void LineProce()
{ }
}
}为什么客户端关闭之后服务器也关闭了呢?有什么好的解决方案么?
namespace client
{
class Program
{
static void Main(string[] args)
{
Program fuck = new Program();
Thread newthread = new Thread(new ThreadStart(fuck.send));
newthread.Start(); } public void send()
{
Socket client = null;
byte[] buffer = new byte[1024];
string input = null;
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint eip = new IPEndPoint(ip, 8888); try
{
client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Console.WriteLine("ready to connect to the server.........");
client.Connect(eip);
}
catch (Exception eX)
{
Console.WriteLine("disconnected from the server.....");
Console.WriteLine(eX.Message);
Console.ReadLine();
Thread.CurrentThread.Abort();
} while (true)
{
Console.WriteLine("waiting sending..................");
input = Console.ReadLine();
if (input == "exit")
{
break;
}
else
{
Console.WriteLine("now sending ......");
client.Send(Encoding.ASCII.GetBytes(input));
Thread.Sleep(1000);
Console.WriteLine("finished.........."); } }
client.Close();
Console.WriteLine("game over");
Thread.CurrentThread.Abort();
}
}
}服务器端:
namespace consolesocket
{
class Program
{
static void Main(string[] args)
{
server js = new server();
Thread n = new Thread(new ThreadStart(js.fun));
n.Start();
}
} class server
{
public server()
{
} public void fun()
{
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint eip = new IPEndPoint(ip, 8888);
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server.Bind(eip);
server.Listen(5);
Console.WriteLine("start to listening......"); while (true)
{
Socket accepted = server.Accept();
Console.WriteLine("one client conected...........");
SocketProcess spc = new SocketProcess(accepted); Thread Data = new Thread(new ParameterizedThreadStart(DataProcess));
// Thread Line = new Thread(new ThreadStart(LineProcess(accepted))); Data.Start(accepted); //object类型参数
// Line.Start(); } }
public void DataProcess(object s)
{
Socket socket = (Socket)s;
Thread threadDataProcess = new Thread(new ThreadStart(new SocketProcess(socket).DataProce));
threadDataProcess.Start();
}
public void LineProcess(Socket s)
{
Thread threadLineProcess = new Thread(new ThreadStart(new SocketProcess(s).LineProce));
threadLineProcess.Start();
} }
class SocketProcess
{
Socket server;
private static int numOfconnection = 0;
public SocketProcess(Socket server)
{
this.server = server;
++numOfconnection;
Console.Write(string.Format("a new client conected it\'s number : {0}\n", numOfconnection));
} public void DataProce()
{
int i = 0;
byte[] buffer = new byte[1024]; Console.WriteLine(" start to receive ........");
Thread.Sleep(1000);
while (true)
{
// try
{
Console.WriteLine("\nlistening...........\n");
if ((i = server.Receive(buffer)) != 0)
{
string data = Encoding.ASCII.GetString(buffer);
if (data.Equals(" ")) data = "cao";
Console.WriteLine(data);
Console.WriteLine(" ........end"); }
}
// catch (Exception eX)
{
// Console.WriteLine(eX.Message);
// Console.Read();
}
}
server.Close();
Console.Write(string.Format("client {0} disconnected\n", numOfconnection--));
Console.Write(string.Format("{0} clients remains connected\n", numOfconnection)); } public void LineProce()
{ }
}
}为什么客户端关闭之后服务器也关闭了呢?有什么好的解决方案么?
在服务器端
try
{........}
catch(SocketException)
{
}这样虽然可以,但是有没有更好的,比如一个客户端断开连接后服务器端可以显示相关信息
catch(SocketException)
{
console.writeline("........."); //服务端将不断地显示这条信息,除非再写一句console.read();但总觉得这样不好,而且如果客户端输入exit断开连接的话,console.read()会失效.
}