110,570
社区成员
发帖
与我相关
我的任务
分享
class Server
{
#region 定义初始化全局变量
int port = 81;
IPAddress ip = IPAddress.Parse("127.0.0.1");
TcpListener listener;
TcpListener sendListener;
ArrayList clients;
ArrayList sendClients;
Socket socket;
Socket sendSocket;
int flag = 0;
int sendFlag = 0;
byte[] buffer;
int rec;
string[] messageStr = new string[500];
Hashtable socketMessage = new Hashtable();
#endregion
public Server()
{
Thread receiveThread = new Thread(new ThreadStart(receive));
Thread sendThread = new Thread(new ThreadStart(send));
receiveThread.Start();
sendThread.Start();
}
//监听客户端口
public void receive()
{
clients = new ArrayList();
try
{
listener = new TcpListener(ip, port);
listener.Start();
Console.WriteLine("Server start listenning : ");
while (true)
{
socket = listener.AcceptSocket();
Console.WriteLine("port[{0}]已连接" , this.getPort(socket));
if (!clients.Contains(socket))
{
clients.Add(socket);
Thread listenThread = new Thread(new ThreadStart(listen));
listenThread.Start();
}
}
}
catch (Exception e)
{
Console.WriteLine("无客户端可连接");
return;
}
}
public void listen()
{
int CurrentSocketNo = flag;
Console.WriteLine("*****************Thread{0} is running*******************",CurrentSocketNo);
flag++;
//用死循环控制监听
while (true)
{
try
{
messageStr[CurrentSocketNo] = "";
Socket clientSocket = (Socket)clients[CurrentSocketNo];
buffer = new byte[256];
int rec = clientSocket.Receive(buffer);
messageStr[CurrentSocketNo] = Encoding.ASCII.GetString(buffer);
Console.WriteLine("*******************************New message****************************** " + CurrentSocketNo);
if (rec < messageStr[CurrentSocketNo].Length)
{
messageStr[CurrentSocketNo] = messageStr[CurrentSocketNo].Substring(0, rec);
}
Console.WriteLine("No.{0} Message : {1}",CurrentSocketNo , messageStr[CurrentSocketNo]);
if (sendClients != null && sendClients.Count != 0)
{
Thread sendThread = new Thread(new ParameterizedThreadStart(send_listen));
sendThread.Start(messageStr[CurrentSocketNo]);
}
}
catch (Exception e)
{
//clients = this.DeleteClosedSocket(clients);
flag--;
if (clients.Count == 0 || clients == null)
{
Console.WriteLine("无客户端连接,等待连接");
}
return;
}
}
}
//监听收信客户端
public void send()
{
sendClients = new ArrayList();
try
{
sendListener = new TcpListener(ip, 91);
sendListener.Start();
Console.WriteLine("Server is listening Send_Port...");
while (true)
{
sendSocket = sendListener.AcceptSocket();
Console.WriteLine("port : " + this.getPort(sendSocket));
if (!sendClients.Contains(sendSocket))
{
sendClients.Add(sendSocket);
}
sendClients = this.DeleteClosedSocket(sendClients);
foreach (Socket s in sendClients)
{
Console.WriteLine(this.getPort(s));
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
sendClients = this.DeleteClosedSocket(sendClients);
}
}
public void send_listen(object obj)
{
string sendMessage = obj as string;
if (sendClients != null && sendClients.Count != 0)
{
//用循环控制向接收客户端发送信息
for (int i = 0; i < sendClients.Count; i++)
{
//向接收客户端发送数据代码
Console.WriteLine("正在向接收客户端发送信息...[{0}]" ,i);
try
{
Socket clientSocket = (Socket)sendClients[i];
IPEndPoint clientip = (IPEndPoint)clientSocket.RemoteEndPoint;
buffer = Encoding.ASCII.GetBytes(sendMessage.ToCharArray());
clientSocket.Send(buffer, buffer.Length, SocketFlags.None);
}
catch (Exception e)
{
return;
}
}
}
}
#region Get IP by socket
public string getIp(Socket socket)
{
IPEndPoint sip = (IPEndPoint)socket.RemoteEndPoint;
string socketIP = sip.Address.ToString();
return socketIP;
}
#endregion
#region Get Port by socket
public string getPort(Socket socket)
{
IPEndPoint sip = (IPEndPoint)socket.RemoteEndPoint;
string socketPort = sip.Port.ToString();
return socketPort;
}
#endregion
#region GetNowTime
public string GetNowTime()
{
DateTime dt = DateTime.Now;
string time = dt.ToString() + " . " + dt.Millisecond.ToString();
return time;
}
#endregion
#region Delete socket in Arraylist which is closed
public ArrayList DeleteClosedSocket(ArrayList socketlist)
{
ArrayList slist = new ArrayList();
foreach (Socket s in socketlist)
{
if (s.Poll(10, SelectMode.SelectRead))
{
slist.Add(s);
}
}
foreach (Socket s in slist)
{
socketlist.Remove(s);
}
return socketlist;
}
#endregion
static void Main(string[] args)
{
Server server = new Server();
}
}
class Client
{
string ip = "127.0.0.1";
int port = 81;
TcpClient clientSocket;
NetworkStream ns;
StreamReader sr;
bool connected;
string message;
Thread connectThread;
int id;
public Client()
{
connected = true;
DateTime dt = DateTime.Now;
id = dt.Millisecond;
connectThread = new Thread(new ThreadStart(connection));
connectThread.Start();
}
public void connection()
{
while (connected)
{
try
{
clientSocket = new TcpClient(ip, port);
ns = clientSocket.GetStream();
sr = new StreamReader(ns);
connected = false;
this.SendMessage();
}
catch (Exception e)
{
Console.WriteLine("Could not connect to Server! Next connection later.");
connected = true;
Thread.Sleep(5000);
}
}
}
public void SendMessage()
{
//循环发送message
while(true)
{
DateTime dt = DateTime.Now;
string time = dt.ToString() + "." + dt.Millisecond.ToString();
message = id + " at " + time ;
Console.WriteLine(message);
try
{
Byte[] bytes = Encoding.ASCII.GetBytes(message.ToCharArray());
ns.Write(bytes, 0, bytes.Length);
}
catch (Exception e)
{
Console.WriteLine("服务器断开");
break;
}
Thread.Sleep(1234);
}
}
public static void Main(string[] args)
{
Client client = new Client();
}
}
listener.Bind(new IPEndPoint(aryLocalAddr[0], nPortListen));
listener.Listen(50000);
if (!clients.Contains(socket))
{
clients.Add(socket);
Thread listenThread = new Thread(new ThreadStart(listen));
listenThread.Start();
}