现在需要写一个.net消息推送服务(和公告表) 一直运行起的,如果客户端有网连接上服务,推送服务就判断客户端穿过来的用户名和密码是否正确,正确的话就把该人的消息推送过去,
但是怎么怎么写获取客户端穿过来的用户名和密码,如何有很多客户端同时连接上怎么写同时推送代码,以下是一些代码还需要怎么写?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Net.Sockets;
using System.Threading;namespace testConsole
{
public class Program
{
static List<TcpClient> tcpClients;
static void Main(string[] args)
{
tcpClients = new List<TcpClient>();
ThreadPool.QueueUserWorkItem(StartAspNetListen);
ThreadPool.QueueUserWorkItem(StartServer);
//ThreadPool.QueueUserWorkItem(test1);
Console.Read();
}
private static void StartServer(object state)
{
TcpListener server = null;
try
{
// Set the TcpListener on port 5222.
Int32 port = 5222; server = new TcpListener(IPAddress.Any, port); server.Start(); while (true)
{ TcpClient client = server.AcceptTcpClient();
tcpClients.Add(client);
IPEndPoint ip = (IPEndPoint)client.Client.RemoteEndPoint; var AdrFamily = ip.AddressFamily.ToString();//地址类型
var IpStr = ip.Address.ToString();//IP地址点分表达方式
var IpPort = ip.Port.ToString();//IP地址端口号
Console.WriteLine("Connected!" + IpStr + ":" + IpPort); var nStream = client.GetStream();
var bytes = System.Text.Encoding.ASCII.GetBytes("hello " + IpStr + ":" + IpPort);
nStream.Write(bytes, 0, bytes.Length);
nStream.Flush();
//nStream.Close();
}
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
finally
{
server.Stop();
}
Console.WriteLine("\nHit enter to continue...");
Console.Read();
} private static void StartAspNetListen(object state)
{
TcpListener server = null;
try
{
Int32 port = 5221; server = new TcpListener(IPAddress.Any, port); server.Start(); Byte[] bytes = new Byte[256];
while (true)
{
Console.Write("Waiting for a connection... "); TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Connected!"); NetworkStream stream = client.GetStream(); int c; c = stream.Read(bytes, 0, bytes.Length);
{ if (tcpClients.Count > 0)
{
for (int i = 0; i < tcpClients.Count; i++)
{
if (tcpClients[i].Connected)
{
try
{
NetworkStream s = tcpClients[i].GetStream();
s.Write(bytes, 0, c);
s.Flush();
}
catch (Exception)
{
tcpClients.RemoveAt(i);
i--;
}
}
else
{
tcpClients.RemoveAt(i);
i--;
}
} }
client.Close();
} }
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
finally
{
server.Stop();
} } private static void test1(object state)
{
TcpListener server = null;
try
{
Int32 port = 13000; server = new TcpListener(IPAddress.Any, port); server.Start(); Byte[] bytes = new Byte[256];
String data = null;
while (true)
{
Console.Write("Waiting for a connection... "); TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Connected!"); NetworkStream stream = client.GetStream(); while (client.Connected)
{
try
{
// Process the data sent by the client.
data = DateTime.Now.ToString(); byte[] msg = System.Text.Encoding.ASCII.GetBytes(data); // Send back a response.
stream.Write(msg, 0, msg.Length);
stream.Flush();
Console.WriteLine("Sent: {0}", data);
Thread.Sleep(3000);
}
catch (Exception)
{
break;
}
}
}
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
finally
{
server.Stop();
}
Console.WriteLine("\nHit enter to continue...");
Console.Read();
}
}
}
但是怎么怎么写获取客户端穿过来的用户名和密码,如何有很多客户端同时连接上怎么写同时推送代码,以下是一些代码还需要怎么写?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Net.Sockets;
using System.Threading;namespace testConsole
{
public class Program
{
static List<TcpClient> tcpClients;
static void Main(string[] args)
{
tcpClients = new List<TcpClient>();
ThreadPool.QueueUserWorkItem(StartAspNetListen);
ThreadPool.QueueUserWorkItem(StartServer);
//ThreadPool.QueueUserWorkItem(test1);
Console.Read();
}
private static void StartServer(object state)
{
TcpListener server = null;
try
{
// Set the TcpListener on port 5222.
Int32 port = 5222; server = new TcpListener(IPAddress.Any, port); server.Start(); while (true)
{ TcpClient client = server.AcceptTcpClient();
tcpClients.Add(client);
IPEndPoint ip = (IPEndPoint)client.Client.RemoteEndPoint; var AdrFamily = ip.AddressFamily.ToString();//地址类型
var IpStr = ip.Address.ToString();//IP地址点分表达方式
var IpPort = ip.Port.ToString();//IP地址端口号
Console.WriteLine("Connected!" + IpStr + ":" + IpPort); var nStream = client.GetStream();
var bytes = System.Text.Encoding.ASCII.GetBytes("hello " + IpStr + ":" + IpPort);
nStream.Write(bytes, 0, bytes.Length);
nStream.Flush();
//nStream.Close();
}
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
finally
{
server.Stop();
}
Console.WriteLine("\nHit enter to continue...");
Console.Read();
} private static void StartAspNetListen(object state)
{
TcpListener server = null;
try
{
Int32 port = 5221; server = new TcpListener(IPAddress.Any, port); server.Start(); Byte[] bytes = new Byte[256];
while (true)
{
Console.Write("Waiting for a connection... "); TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Connected!"); NetworkStream stream = client.GetStream(); int c; c = stream.Read(bytes, 0, bytes.Length);
{ if (tcpClients.Count > 0)
{
for (int i = 0; i < tcpClients.Count; i++)
{
if (tcpClients[i].Connected)
{
try
{
NetworkStream s = tcpClients[i].GetStream();
s.Write(bytes, 0, c);
s.Flush();
}
catch (Exception)
{
tcpClients.RemoveAt(i);
i--;
}
}
else
{
tcpClients.RemoveAt(i);
i--;
}
} }
client.Close();
} }
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
finally
{
server.Stop();
} } private static void test1(object state)
{
TcpListener server = null;
try
{
Int32 port = 13000; server = new TcpListener(IPAddress.Any, port); server.Start(); Byte[] bytes = new Byte[256];
String data = null;
while (true)
{
Console.Write("Waiting for a connection... "); TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Connected!"); NetworkStream stream = client.GetStream(); while (client.Connected)
{
try
{
// Process the data sent by the client.
data = DateTime.Now.ToString(); byte[] msg = System.Text.Encoding.ASCII.GetBytes(data); // Send back a response.
stream.Write(msg, 0, msg.Length);
stream.Flush();
Console.WriteLine("Sent: {0}", data);
Thread.Sleep(3000);
}
catch (Exception)
{
break;
}
}
}
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
finally
{
server.Stop();
}
Console.WriteLine("\nHit enter to continue...");
Console.Read();
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货