代码如下
System.Threading.Thread.Sleep(200);
Byte[] buffer = new Byte[8192];//一个8×1024bits的缓存区
do
{
availCount = sock.Available; if (availCount < buffer.Length)
{
recvCount = sock.Receive(buffer, availCount, SocketFlags.None);
}
else
{
recvCount = sock.Receive(buffer, buffer.Length, SocketFlags.None);
} availCount = sock.Available;
if (recvCount > 0)
{
receiveData += Encoding.GetEncoding("GB18030").GetString(buffer, 0, recvCount);
}
}
while (availCount > 0);
经常只能收到这样的数据
POST / HTTP/1.1
Host: 172.16.92.14:9000
Content-Length: 620
Expect: 100-continue
Connection: Keep-Alive下面的内容都没了
System.Threading.Thread.Sleep(200);
Byte[] buffer = new Byte[8192];//一个8×1024bits的缓存区
do
{
availCount = sock.Available; if (availCount < buffer.Length)
{
recvCount = sock.Receive(buffer, availCount, SocketFlags.None);
}
else
{
recvCount = sock.Receive(buffer, buffer.Length, SocketFlags.None);
} availCount = sock.Available;
if (recvCount > 0)
{
receiveData += Encoding.GetEncoding("GB18030").GetString(buffer, 0, recvCount);
}
}
while (availCount > 0);
经常只能收到这样的数据
POST / HTTP/1.1
Host: 172.16.92.14:9000
Content-Length: 620
Expect: 100-continue
Connection: Keep-Alive下面的内容都没了
Int32 bytes = s.Receive(RecvBytes, RecvBytes.Length, 0);
while (bytes > 0)
{
bytes = s.Receive(RecvBytes, RecvBytes.Length, 0);
}
楼主要处理 HTTP请求的话这样看着也真别扭。 最好是一读一计数,读完就中断。另外GetEncoding("GB18030"). 是啥意思呢?
中文系统一般是 GB2312 或者HTTP服务程序 用UTF8也一般不会有错。是不是你的编码也不对啊?
楼主要处理 HTTP请求的话这样看着也真别扭。 最好是一读一计数,读完就中断。 另外GetEncoding("GB18030"). 是啥意思呢?
中文系统一般是 GB2312 或者HTTP服务程序 用UTF8也一般不会有错。是不是你的编码也不对啊?
-----------------------------------
这里只是读取的代码
外围在读取完毕处理后,有做中断
sock.Shutdown(SocketShutdown.Both);
sock.Close();GB18030这里只是编码格式,客户端发送的是GB18030编码。格式应该无所谓
----------------------------------------------------
这里是完整代码
Socket ssock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress hostIp = Dns.GetHostEntry(Ip).AddressList[0];
int MiscPort = 8000;
IPEndPoint ep = new IPEndPoint(hostIp, MiscPort);
ssock.Bind(ep); //绑定
Console.WriteLine("开始侦听CP数据.");//开始侦听
ssock.Listen(32);
bool isListen = true;
while (isListen)
{
Socket sock = ssock.Accept(); //等待客户端请求
BaseConnection client = new BaseConnection(sock);
try
{
/***
上面的读取缓冲区的代码
**** /
返回响应包
sendResponse(resp); }
catch (Exception e)
{
Console.WriteLine("--" + e.Message);
}
finally
{
client.ConClose(); //关闭连接
}
Console.WriteLine("结束一个请求");
Console.WriteLine("////////////////////////////////////////////////");
}现在的情况很奇特,有时候在一个时间段内什么都读不到,有时候就读到一部分的数据,POST的内容都没有,有时候就能读到完整的
string Format = "utf-8";
HttpWebRequest req = (HttpWebRequest)System.Net.HttpWebRequest.Create(Url);
req .Method = "POST";
Stream stream= req .GetRequestStream();
StreamWriter wr= new StreamWriter(stream, Encoding.GetEncoding(Format ));
wr.Write(str);
wr.Close();
stream.Close();
StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream(), Encoding.GetEncoding(Format ));
string xml = reader.ReadToEnd();
这是发包方的发送代码
异步方式,接受端经常只检测到有ip连接,然后没有响应,后面的数据都抓不到了
不过现在产生另外一个问题,我当发包方做了一个for循环的发包的时候,
for (int i=0;i<10;i++)
{
string Format = "utf-8";
HttpWebRequest req = (HttpWebRequest)System.Net.HttpWebRequest.Create(Url);
req .Method = "POST";
Stream stream= req .GetRequestStream();
StreamWriter wr= new StreamWriter(stream, Encoding.GetEncoding(Format ));
wr.Write(str);
wr.Close();
stream.Close();
StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream(), Encoding.GetEncoding(Format ));
string xml = reader.ReadToEnd();
}
本机调测,当i到1-3次不等的时候,就抛出这样的错误:
基础连接已经关闭: 服务器关闭了本应保持活动状态的连接。是因为客户端发布速度太快了么?