Socket接收大批量数据

qpzm3213 2012-11-22 08:31:56
我socket接收客户端发来的数据,接收20条的样子都是1秒2-3条的样子,但是20几条之后,数据就1秒钟无数条.是什么情况?我代码是如下:

namespace ConsoleApplication1
{
class Program
{
static Socket serverSocket;
static Socket clientSocket;
static Thread thread;
static Random r = new Random();
public delegate void benginWork(Socket soc);
static void Main(string[] args)
{
IPEndPoint ipep = new IPEndPoint(IPAddress.Any,4858);
serverSocket = new Socket(ipep.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(ipep);
serverSocket.Listen(200);
benginWork bw = doWork;
while (true)
{
clientSocket = serverSocket.Accept();
bw.BeginInvoke(clientSocket,null,null);
// thread = new Thread(new ThreadStart(doWork));
//thread.Start();
}
}

static GPSSource gpssce;
private static void doWork(Socket soc)
{
try
{
Socket s = soc;
// IPEndPoint ipEndPoint = (IPEndPoint)s.RemoteEndPoint;
// String address = ipEndPoint.Address.ToString();
// String port = ipEndPoint.Port.ToString();
//Console.WriteLine(address + ":" + port + " 连接过来了");

Byte[] inBuffer = new Byte[1024];
String inBufferStr;
sendCmdToClient(s,new CoCMD());

string sti = "";
char[] ch;
gpssce = new GPSSource();
while (s!=null && s.Connected==true)
{
s.Receive(inBuffer);
for (int i = 0; i < 100; i++)
{
sti = sti + ("" + "0123456789ABCDEF".Substring(0xf & inBuffer[i] >> 4,1)
+ "0123456789ABCDEF".Substring(inBuffer[i] & 0xf,1));
}
//Console.WriteLine(sti);
if (sti.StartsWith("40"))
{
Console.WriteLine(sti);
gpssce.Gpscode = sti.Substring(2, 8);
gpssce.Command = sti.Substring(12, 4);
// Console.WriteLine(Convert.ToInt32(gpssce.Command, 16) + ":" + gpssce.Command);
C1CMD c1 = new C1CMD();
if (gpssce.Command == "4331")
{
c1.VechicleNo = sti.Substring(2, 8);
c1.OrderNo = sti.Substring(10, 2);
//c1.ConnectTime =(Convert.ToInt64((DateTime.Now - DateTime.Parse("1970-1-1 8:00:00")).TotalMilliseconds) / 1000).ToString("X");
c1.ConnectTime = too.gpsdate();
// c1.ConnectTime =""+ Convert.ToInt32(c1.ConnectTime,16);
Console.WriteLine("发送指令C1");
// Console.WriteLine("shijian:" + c1.ConnectTime);
sendCmdToClient(s, c1);
}
else if (gpssce.Command == "4339")
{
Console.WriteLine("发送指令C9");
}
else if (gpssce.Command == "4338")
{
Console.WriteLine("发送指令C8");
}
else if (gpssce.Command == "4335")
{
Console.WriteLine("发送指令C5");

}
else if (gpssce.Command == "4431")
{
Console.WriteLine("发送指令D1");
}
else if (gpssce.Command == "4430")
{
Console.WriteLine("发送指令D0");
}
//s.Shutdown(SocketShutdown.Both);
//s.Close();
}
}
}
catch
{
}
}

static GPSTools too = new GPSTools();
public static void sendCmdToClient(Socket s, CMD cmd)
{
try
{
String outBufferStr = cmd.toString();
Byte[] outBuffer = new Byte[outBufferStr.Length];
outBuffer = too.HexString2Bytes(outBufferStr);
int issend = s.Send(outBuffer, outBuffer.Length, SocketFlags.None);
// Console.WriteLine("已发送字节:"+issend);
}
catch (Exception e)
{
Console.WriteLine(e.Message.ToString());
}
}



}
}
...全文
131 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qpzm3213 2012-11-22
  • 打赏
  • 举报
回复
clientSocket原本是全局的静态变量,现在我把他设置为局部变量,好了一点,接收的数据多了点,差不多接收了1分钟之后又爆掉了..
qpzm3213 2012-11-22
  • 打赏
  • 举报
回复
因为有几十个客户端同时连接,会不会连接一多导致clientSocket = serverSocket.Accept()这里的clientsocket爆满了?????
qpzm3213 2012-11-22
  • 打赏
  • 举报
回复
在线等啊.求帮忙

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧