//服务端各位高手帮忙看看,小女子感激不尽using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.Reflection;namespace Socket3
{
class Class1
{
static Socket temp = null;
public static void StartAccept()
{ int port = 2000;
string host = "172.16.10.168"; ///创建终结点(EndPoint)
IPAddress ip = IPAddress.Parse(host);//把ip地址字符串转换为IPAddress类型的实例
IPEndPoint ipe = new IPEndPoint(ip, port);//用指定的端口和ip初始化IPEndPoint类的新实例 //创建socket并开始监听
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对像,如果用udp协议,则要用SocketType.Dgram类型的套接字 s.Bind(ipe);//绑定EndPoint对像(2000端口和ip地址)
s.Listen(0);//开始监听
Console.WriteLine("等待客户端连接");
while (true)
{
try
{
///接受到client连接,为此连接建立新的socket,并接受信息
Socket temp = s.Accept();//为新建连接创建新的socket
Console.WriteLine("建立连接");
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
recvStr += Encoding.UTF8.GetString(recvBytes, 0, bytes);
Console.WriteLine(recvStr);
string[] str = Spilter.StringSplit(recvStr.Remove(recvStr.Length - 6), "~`~^~~"); // int.TryParse(str[0].ToString();
//string recvStr = "100~`~^~~ABECommand~`~^~~get_Flights_Only~`~^~~mac地址~`~^~~detruser~`~^~~123456~`~^~~CA155~`~^~~2010-04-25~`~^~~6~`~^~~0";
//string[] str = Spilter.StringSplit(recvStr, "~`~^~~");
//if (Encoding.UTF8.GetBytes(recvStr).Length - str[0].Length != int.Parse(str[0].ToString()))
//{
// Console.WriteLine("数据没有接收完全" + Encoding.UTF8.GetBytes(recvStr).Length);
// byte[] bs1 = Encoding.UTF8.GetBytes("数据没有接收传过来");
// temp.Send(bs1, bs1.Length, 0);//返回信息给客户端
// return;
//} object[] oArray = new object[str.Length - 4];
for (int i = 0; i < str.Length - 4; i++)
{
oArray[i] = str[i + 4];
} object obj2 = "";
try
{
object obj = Assembly.GetExecutingAssembly().CreateInstance("Socket3." + str[1].ToString(), false); obj2 = Type.GetType("Socket3." + str[1].ToString()).GetMethod(str[2].ToString()).Invoke(obj, oArray); }
catch
{
byte[] bs2 = Encoding.UTF8.GetBytes("你传过来的参数不正确");
temp.Send(bs2, bs2.Length, 0);//返回信息给客户端
}
///给client端返回信息
Console.WriteLine("server get message:{0}", recvStr);//把客户端传来的信息显示出来 byte[] bs = Encoding.UTF8.GetBytes(obj2.ToString());
temp.Send(bs, bs.Length, 0);//返回信息给客户端
//temp.Close();
//s.Close();
}
catch (Exception ex)
{
Console.WriteLine("异常: {0}", ex);
byte[] bs2 = Encoding.UTF8.GetBytes("异常");
temp.Send(bs2, bs2.Length, 0);//返回信息给客户端
}
Console.WriteLine("Press Enter to Exit");
}
} static void Main(string[] args)
{
Thread t = new Thread(new ThreadStart(StartAccept));
t.Start(); Console.Read(); } }
}
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.Reflection;namespace Socket3
{
class Class1
{
static Socket temp = null;
public static void StartAccept()
{ int port = 2000;
string host = "172.16.10.168"; ///创建终结点(EndPoint)
IPAddress ip = IPAddress.Parse(host);//把ip地址字符串转换为IPAddress类型的实例
IPEndPoint ipe = new IPEndPoint(ip, port);//用指定的端口和ip初始化IPEndPoint类的新实例 //创建socket并开始监听
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个socket对像,如果用udp协议,则要用SocketType.Dgram类型的套接字 s.Bind(ipe);//绑定EndPoint对像(2000端口和ip地址)
s.Listen(0);//开始监听
Console.WriteLine("等待客户端连接");
while (true)
{
try
{
///接受到client连接,为此连接建立新的socket,并接受信息
Socket temp = s.Accept();//为新建连接创建新的socket
Console.WriteLine("建立连接");
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
recvStr += Encoding.UTF8.GetString(recvBytes, 0, bytes);
Console.WriteLine(recvStr);
string[] str = Spilter.StringSplit(recvStr.Remove(recvStr.Length - 6), "~`~^~~"); // int.TryParse(str[0].ToString();
//string recvStr = "100~`~^~~ABECommand~`~^~~get_Flights_Only~`~^~~mac地址~`~^~~detruser~`~^~~123456~`~^~~CA155~`~^~~2010-04-25~`~^~~6~`~^~~0";
//string[] str = Spilter.StringSplit(recvStr, "~`~^~~");
//if (Encoding.UTF8.GetBytes(recvStr).Length - str[0].Length != int.Parse(str[0].ToString()))
//{
// Console.WriteLine("数据没有接收完全" + Encoding.UTF8.GetBytes(recvStr).Length);
// byte[] bs1 = Encoding.UTF8.GetBytes("数据没有接收传过来");
// temp.Send(bs1, bs1.Length, 0);//返回信息给客户端
// return;
//} object[] oArray = new object[str.Length - 4];
for (int i = 0; i < str.Length - 4; i++)
{
oArray[i] = str[i + 4];
} object obj2 = "";
try
{
object obj = Assembly.GetExecutingAssembly().CreateInstance("Socket3." + str[1].ToString(), false); obj2 = Type.GetType("Socket3." + str[1].ToString()).GetMethod(str[2].ToString()).Invoke(obj, oArray); }
catch
{
byte[] bs2 = Encoding.UTF8.GetBytes("你传过来的参数不正确");
temp.Send(bs2, bs2.Length, 0);//返回信息给客户端
}
///给client端返回信息
Console.WriteLine("server get message:{0}", recvStr);//把客户端传来的信息显示出来 byte[] bs = Encoding.UTF8.GetBytes(obj2.ToString());
temp.Send(bs, bs.Length, 0);//返回信息给客户端
//temp.Close();
//s.Close();
}
catch (Exception ex)
{
Console.WriteLine("异常: {0}", ex);
byte[] bs2 = Encoding.UTF8.GetBytes("异常");
temp.Send(bs2, bs2.Length, 0);//返回信息给客户端
}
Console.WriteLine("Press Enter to Exit");
}
} static void Main(string[] args)
{
Thread t = new Thread(new ThreadStart(StartAccept));
t.Start(); Console.Read(); } }
}
1 用异步模型,.NET现成的
2 如果你要用你的东西。那么就应该 在 Socket temp = s.Accept();
后,把这个SOCKET句柄,放到一个新的线程里面去。然后后继操作在那个新线程里完成。不然在你这个WHILE没有执行完之前,其他任何连接都无法连接进来的