[C#]关于TcpClient编程数据接收问题
2010-08-31 19:01
1216 查看
当写成两遍或以上的Write()给服务端接收有可能只能接收到一条信息,即下面的“客户端数据提交1/n”,应在服务端的接收段和客户端接收段编写相应延时代码,以达到数据完全接收。
Server Code:
while (!done)
{
TcpListener listener = new TcpListener(8000);
listener.Start();
byte[] bytes = new byte[1024];
int bytesRead = 0;
TcpClient client = new TcpClient();
NetworkStream ns = null;
Console.Write("正在侦听端口...");
client = listener.AcceptTcpClient();
Console.WriteLine("/n处理连接请求...");
ns = client.GetStream();
bytes = new byte[1024];
//延时获取全部数据
Delay(0.1);//
bytesRead = ns.Read(bytes, 0, bytes.Length);
Console.WriteLine(Encoding.BigEndianUnicode.GetString(bytes,0,bytesRead));
.....
}
Client Code:
TcpClient client=new TcpClient("192.168.8.88",8000);
NetworkStream ns=client.GetStream();
byte[] byteTime=Encoding.BigEndianUnicode.GetBytes("客户端数据提交1/n");
ns.Write(byteTime,0,byteTime.Length);
ns.WriteTimeout = 10;
byte[] clientIp = Encoding.BigEndianUnicode.GetBytes("客户端数据提交2/n客户端IP地址:" + Request.UserHostAddress + "/n");
ns.Write(clientIp,0,clientIp.Length);
//
byte[] Test = Encoding.BigEndianUnicode.GetBytes("testing/n");
ns.Write(Test, 0, Test.Length);
byte[] bytes=new byte[1024];
ns.ReadTimeout = 10;
Delay(0.1);
int bytesRead=ns.Read(bytes,0,bytes.Length);
showLabel.Text = "服务器返回信息:" + Encoding.BigEndianUnicode.GetString(bytes);
............
延时过程:
private static void Delay(double second)
{
DateTime now = DateTime.Now;
while (now.AddSeconds(second) > DateTime.Now)
{
}
}
Server Code:
while (!done)
{
TcpListener listener = new TcpListener(8000);
listener.Start();
byte[] bytes = new byte[1024];
int bytesRead = 0;
TcpClient client = new TcpClient();
NetworkStream ns = null;
Console.Write("正在侦听端口...");
client = listener.AcceptTcpClient();
Console.WriteLine("/n处理连接请求...");
ns = client.GetStream();
bytes = new byte[1024];
//延时获取全部数据
Delay(0.1);//
bytesRead = ns.Read(bytes, 0, bytes.Length);
Console.WriteLine(Encoding.BigEndianUnicode.GetString(bytes,0,bytesRead));
.....
}
Client Code:
TcpClient client=new TcpClient("192.168.8.88",8000);
NetworkStream ns=client.GetStream();
byte[] byteTime=Encoding.BigEndianUnicode.GetBytes("客户端数据提交1/n");
ns.Write(byteTime,0,byteTime.Length);
ns.WriteTimeout = 10;
byte[] clientIp = Encoding.BigEndianUnicode.GetBytes("客户端数据提交2/n客户端IP地址:" + Request.UserHostAddress + "/n");
ns.Write(clientIp,0,clientIp.Length);
//
byte[] Test = Encoding.BigEndianUnicode.GetBytes("testing/n");
ns.Write(Test, 0, Test.Length);
byte[] bytes=new byte[1024];
ns.ReadTimeout = 10;
Delay(0.1);
int bytesRead=ns.Read(bytes,0,bytes.Length);
showLabel.Text = "服务器返回信息:" + Encoding.BigEndianUnicode.GetString(bytes);
............
延时过程:
private static void Delay(double second)
{
DateTime now = DateTime.Now;
while (now.AddSeconds(second) > DateTime.Now)
{
}
}
相关文章推荐
- UDP 协议 C# UdpClient乱序接收数据包丢失的问题 Socket ReceiveBufferSize
- 关于使用TCP或者其他链接方式时数据接收问题
- 关于系统首页绘制问题(ext布局+c#后台加入数据)经html输出流输出响应client
- C#TCPClient应用-一个简单的消息发送和接收
- Indy10 Tcp接收数据问题
- 关于DELLR710/R910(rhel5.3-5.5) Broadcom netxtreme 5709网卡间歇性的停止接收数据包的问题解决方案
- socket编程技巧(1)tcp接收接口(变长数据定长数据)的编写实例
- 关于批量数据更新的问题(C#高性能)
- 关于C#数据类型之间转换的问题!
- C# Tcp协议收发数据(TCPClient发,Socket收)
- 关于c#double型数据四舍五入的问题
- C# 关于GZipStream压缩与解压缩数据丢失问题
- C#使用UdpClient发送和接收UDP数据示例 16进制与字符串互转
- 关于rtsp客户端接收数据、解码、处理性能的有关问题
- Linux下串口编程遇 接收数据错误问题及原因
- 关于BF53X的c编程数据类型问题
- C# Socket tcp 发送数据大小问题
- 解决c# httpClient进行PostAsync()后返回数据中文乱码问题
- C/C++ socket编程教程之九:TCP的粘包问题以及数据的无边界性
- 关于VS2005中C#代码用F12转到定义时,总是显示从元数据的问题