TCP通信无法接收数据

ykp1120 2011-06-13 10:30:22
TCP通信无法接收数据,代码如下:

/// <summary>
/// 声明获取事件的委托
/// </summary>
private delegate void SynReceive();
/// <summary>
/// 线程接收函数
/// </summary>

public void Receive()
{

try
{
string strRcv = "";
// 声明字节数组,一次接收数据的长度为1024字节
byte[] RcvBuffer = new byte[1024];
//循环读取,直到接收完所有数据
while (true)
{
int bytes = socket.Receive(RcvBuffer, RcvBuffer.Length, 0);
//读取完成后退出循环
if (bytes <= 0)
break;
//将读取的字节数转换为字符串
strRcv += Encoding.ASCII.GetString(RcvBuffer,bytes,0);

if (!txtRcv.InvokeRequired)
{
txtRcv.AppendText(strRcv);

}
else
{
txtRcv.Invoke(new SynReceive(Receive));
}

}

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

}
...全文
594 51 打赏 收藏 转发到动态 举报
写回复
用AI写文章
51 条回复
切换为时间正序
请发表友善的回复…
发表回复
ykp1120 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 jq_whh 的回复:]
事件的委托没成功,根本就没执行,先不要用委托
[/Quote]
不明白你的意思,如果不用委托,我在接收服务器返回的信息时不是出现跨线程调用的问题,请指教
jq_whh 2011-06-17
  • 打赏
  • 举报
回复
呵呵,Start()的问题我早就发现了,只是委托的方法我一直没用过,早上到现在一直在学习。
代的代码很好,顺便学习,谢谢!

[Quote=引用 50 楼 xingchen_22 的回复:]
还真有早的啊,我还以为是你忘写了哪,如果是这样那就是你的线程没有启动,你只是创建了线程,应该用线程对象的Start()函数启动线程。
[/Quote]
Forget 2011-06-17
  • 打赏
  • 举报
回复
还真有早的啊,我还以为是你忘写了哪,如果是这样那就是你的线程没有启动,你只是创建了线程,应该用线程对象的Start()函数启动线程。
ykp1120 2011-06-17
  • 打赏
  • 举报
回复
接收的代码要怎么写,请指教
jq_whh 2011-06-17
  • 打赏
  • 举报
回复
我用了你的代码,设了个断点,程序就没进入你的接收的代码的位置
hyl1110110 2011-06-16
  • 打赏
  • 举报
回复
我做的是客户端的程序,在TextBox里输入IP还有端口
jq_whh 2011-06-16
  • 打赏
  • 举报
回复
在本窗体调试通过之后再用委托、线程
jq_whh 2011-06-16
  • 打赏
  • 举报
回复
事件的委托没成功,根本就没执行,先不要用委托
ykp1120 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 xingchen_22 的回复:]
你好好检查一下,看是不是文本框输入的值对应错了,意思就是你把发送的参数写到接收框去了,如果没有的话,我也不知道怎么回事了,我这边拷贝你的代码是可以正常使用的。
[/Quote]
能否把你的完整代码给我看一下
Forget 2011-06-16
  • 打赏
  • 举报
回复
你的代码的问题出在下面,如果你是调试模式的话那么else语句100%会执行,也就是
txtRcv.Invoke(new SynReceive(Receive))会执行。那请问你在这个语句前接收的数据,你放到哪了。

if (!txtRcv.InvokeRequired)
{
txtRcv.AppendText(strRcv);

}
else
{
txtRcv.Invoke(new SynReceive(Receive));
}
gxwy88 2011-06-16
  • 打赏
  • 举报
回复
没怎么看明白...
ykp1120 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 jq_whh 的回复:]
引用 35 楼 ykp1120 的回复:
不能接收,能否告诉我怎么解决这个问题


不能接收,是弹出错误提示,还是收不到数据?

另外程序中的两个问题先说一下:

1. 不要用socket.Connected来判断连接是否建立,即使在双方正在进行通信时它都可能是false,网上的解释很多,自己查一下。
所以你的几个按钮都会出现判断错误的情况发生。

2. int byte……
[/Quote]

可以从客户端向服务器成功发送数据,接收不到服务器发送过来的数据,没有错误提示,
让爱延续 2011-06-16
  • 打赏
  • 举报
回复
找个监听数据包的工具


每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
jq_whh 2011-06-16
  • 打赏
  • 举报
回复
补充一下在接收时先做一下判断:

if(socket.Available!=0)
int bytes = socket.Receive(RcvBuffer, RcvBuffer.Length, 0);
jq_whh 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 ykp1120 的回复:]
不能接收,能否告诉我怎么解决这个问题
[/Quote]

不能接收,是弹出错误提示,还是收不到数据?

另外程序中的两个问题先说一下:

1. 不要用socket.Connected来判断连接是否建立,即使在双方正在进行通信时它都可能是false,网上的解释很多,自己查一下。
所以你的几个按钮都会出现判断错误的情况发生。

2. int bytes = socket.Receive(RcvBuffer, RcvBuffer.Length, 0);
如果RcvBuffer.Length不等于0,且未收到数据时,这条语句会报错,是吗,前两天帮人调试时,是这样

cllchenlulu 2011-06-16
  • 打赏
  • 举报
回复
帮我看看这个问题 纠结 楼主也可以看看里面的代码 类似
http://topic.csdn.net/u/20110616/16/e1e83e95-1e82-4068-ba01-fa84be1a061b.html?42870
Forget 2011-06-16
  • 打赏
  • 举报
回复
你好好检查一下,看是不是文本框输入的值对应错了,意思就是你把发送的参数写到接收框去了,如果没有的话,我也不知道怎么回事了,我这边拷贝你的代码是可以正常使用的。
ykp1120 2011-06-16
  • 打赏
  • 举报
回复
不能接收,能否告诉我怎么解决这个问题
Forget 2011-06-16
  • 打赏
  • 举报
回复
我给你个数据你看能不能收到数据,如果能就是你的服务器的问题,如果不能就是接收端有错误。
IP:119.75.217.56
port:80
request:GET / HTTP/1.1(这里加个回车)
会返回百度的首页
ykp1120 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 xingchen_22 的回复:]
private delegate void SynReceive(string str);
/// <summary>
/// 线程接收函数
/// </summary>

public void RealRec(string str)
{
this.txtRcv.AppendText(str);
}

private void Receive(……
[/Quote]我按这个写了还是不能接收从服务器发过来的数据
加载更多回复(29)

110,538

社区成员

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

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

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