TcpClient接收问题

问题描述

TcpClientTcp=newTcpClient(ip.port);stringremsg;while(true){byte[]byt=newbyte[1024*8];Tcp.Client.Receive(byt);//注意这个receiveremsg=Encoding.UTF8.GetString(byt).Trim('');if(remsg=="Do"){byte[]rbyte=newbyte[1024*1024*2];Tcp.Client.Receive(rbyte);//这里的receive会不会被上面的receive影响?}}//endwhile

解决方案

本帖最后由 derek1989 于 2016-05-07 22:27:17 编辑
解决方案二:
除非这方法里啥事都没干,否则肯定有影响
解决方案三:
引用楼主derek1989的回复:

[code=csharp]TcpClientTcp=newTcpClient(ip.port);stringremsg;while(true){byte[]byt=newbyte[1024*8];Tcp.Client.Receive(byt);//注意这个receiveremsg=Encoding.UTF8.GetString(byt).Trim('');

绝不能如此。Receive返回了一个int,表示实际放到byt中的字节数,而这放入的字节可能是“沾包、分包”的结果,怎么能直接GetString呢?
解决方案四:
receive返回值这么重要你都不管了?
解决方案五:
如果当前使用的是面向连接的Socket,那么Receive方法将会读取所有可用的数据,直到达到缓冲区的大小为止;假如你的server端send有两次,第一次内容为Do第二次为Ok你client端第一次receive就有可能读到的数据是Dook切记,读写不是一一对应的
解决方案六:
引用2楼sp1234的回复:

Quote: 引用楼主derek1989的回复:
[code=csharp]TcpClientTcp=newTcpClient(ip.port);stringremsg;while(true){byte[]byt=newbyte[1024*8];Tcp.Client.Receive(byt);//注意这个receiveremsg=Encoding.UTF8.GetString(byt).Trim('');

绝不能如此。Receive返回了一个int,表示实际放到byt中的字节数,而这放入的字节可能是“沾包、分包”的结果,怎么能直接GetString呢?

那我这段代码应该如何修改才能正常运行呢?
解决方案七:
引用3楼dongxinxi的回复:

receive返回值这么重要你都不管了?

返回值?何解?新手求解答
解决方案八:
你应该去看每个函数的介绍,有示例代码,想想为什么,官方帮助文档很全面的。tcp内容很多的,你的代码中忽略真的太多,想深入的话,看看tcp协议!返回值会告诉你接收数据的长度。

时间: 2024-10-29 08:04:17

TcpClient接收问题的相关文章

tcp / ip 简单通信

问题描述 [img=http://photo.163.com/xx7109@126/big/#aid=236916196&id=7564874358][/img]出现错误,请高手看看 解决方案 解决方案二:看不到图片..解决方案三:TcpListen监听TcpCLient接收与发送

使用Tcplistener和tcpclient进行网络通信时,为什么不能连续接收数据呢?

问题描述 当在服务器端采用无限循环接收数据时,可以连续接收,但这样客户端却不能连续接收来自服务器的数据了.我所希望的效果是client发送控制命令给server,server将运行状态反馈给client.谁能帮帮忙?服务器端代码:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSyste

运用C#实现POP3邮件接收程序

程序 微软的VS.Net开发工具推出已有一段时日了,其中的那门新语言C#也日渐为大家所熟悉并接受.C#作为一门新兴的语言相信具有传统语言不可比拟的优越性,特别是在网络应用方面,开发者更是感觉到了C#的强大功能.所以本文就通过运用C#来实现一个基于POP3协议的邮件接收程序来向大家展示C#网络编程的功能强大,同时也向大家介绍一下基于POP3协议的电子邮件接收原理. 首先我向大家介绍邮件接收的基本原理: 一开始便是客户端与服务器的连接.不过,在客户端连接到服务器之前,注意把端口设为POP3协议默认的

编程-Java与C#用socket通讯 只求发送数据部分和数据接收部分(发送简单的文本信息)

问题描述 Java与C#用socket通讯 只求发送数据部分和数据接收部分(发送简单的文本信息) 只求发送数据部分和数据接收部分 TCP连接不要 客户端和服务器响应次数也不要 只求发送数据部分和数据接收部分(java发送c#接收) 解决方案 server: Java code public void handleConnection(Socket connection) { System.out.println("客户:" + connection.getInetAddress() +

TcpClient的streamreader选择ReadLine还是ReadToEnd

问题描述 写一个TCP客户端,解析server发送的xml协议流,xml协议很简单,类似<?xmlversion="1.0"encoding="utf-8"?><bookname=""data=""price=""><result></result></book>一行一句.用的StreamReader(TcpClient.GetStream).Re

Asp.net Socket客户端(远程发送和接收数据)_实用技巧

复制代码 代码如下: /*************************************** * 对象名称: SocketObj * 功能说明: 远程发送与接收 * 试用示例: * using EC; //引用空间名 * string url = "218.75.111.74"; // URL也可以是(http://www.baidu.com/)这种形式 * int port = 8000; //端口 * string SendStr = "domainname\n

C# socket packet接收越来越慢

问题描述 1.client用whileloop发送1000个小packet到server2.server接收到1000个packet后,打印所用到的时间server接收的代码:BinaryFormatterbft=newBinaryFormatter();while(true){try{Memberm=(Member)bft.Deserialize(mStream);//mStream是tcpClient.getStream().if(m.id==1){打印时间}}catch(..){}}测试后

TcpClient数据通讯丢包问题

问题描述 第一次写通讯,C#通过TcpClient连接到一个C++编号的TCP服务,但是连接上后,从C++服务端推送过来的时候有丢包,请问这个怎么解决,,..求写过通讯的高手们帮帮忙,下面是我整个TCP通讯的主要代码!客户端TCP连接类usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Net.Sockets;usingSystem.Windows.Forms;usingSystem.Net;names

Swift中socket不定长消息发送接收的方法总结

使用 socket 可以很方便地实现客服端和服务器的长连接,并进行双向的数据通信.但有时我们发送的数据包长度并不是固定的(比如做一个聊天系统),通常的做法是在数据包前面添加个包头信息,让接收方知道整个发送包的长度.也就是说接收方先收这个固定长度的包头信息,然后再根据包头信息里面定义的实际长度来接收包数据. 下面通过一个聊天室程序演示 socket 发送/读取不定长消息包的几种方法.socket 通信这里我们使用了一个封装好的 socket 库(SwiftSocket). 几种方法 (以聊天室为例