小弟正在做一个即时通讯的软件,遇到个问题:对方发第一条消息过来时,打开在线用户列表中对方的号码接收时,没消息,只有保持接收对话框开着才能正常收发信息.
while( true )
{
if(!this.news.Equals(""))
{
try
{
byte[] Snews = System.Text.Encoding.UTF8.GetBytes(this.news.ToCharArray());
this.server.Send(Snews);
}
catch
{
System.Windows.Forms.MessageBox.Show("发送消息出错!");
}
this.news = "";

}
//wait one second
Thread.Sleep(1000);
}我在发送信息完后加了一条this.news = "",否则接收方会重复收到N条信息,但现在就出现了上面说的问题,请高手指点

解决方案 »

  1.   

    你不是写了休眠时间1秒么,1秒一次
    socket连接是可靠连接,必须一直开着服务端和客户端才可以通信,如果想可以关闭,试试UDP
    对了,QQ是用HTTP协议传输,由服务器转发的
      

  2.   

    我用的是C#,UDPClient,只要news有值它就会一直发,接受方会收到重复信息,如果发送一次就把UDP关闭了,那么对方从在线用户列表中打开接收框时收不到信息,只有让接收框保持打开状态才可以收信息.有没有人能帮我解决下这个问题,对方发送消息后再打开接收框也能收到信息?谢谢
      

  3.   

    这个不可能,除非有服务器来替你暂存消息,就象QQ的那样
    QQ消息发送成功会有一个返回信息返回给发送消息的一端,连续发送几次超时就把消息发送给服务器保存,等你上线的时候服务器查找你的小心再发送给你
      

  4.   

    应该用线程的,我也一直在研究IM,有时间交流一下
    QQ:109072507