[C#]关于TcpClient编程数据接收问题

当写成两遍或以上的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)

        {

        }

    } 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值