标题:C#(socket)开发的windows窗体程序(客户端和服务器端)
只看楼主
zl123
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2010-8-24
结帖率:66.67%
已结贴  问题点数:20 回复次数:14 
C#(socket)开发的windows窗体程序(客户端和服务器端)
用socket实现客户端接受服务器端发送的数据并在右下角显示出来(类似qq那种的提示框),现在基本上已经实现,但是有个问题(就是说:在接收的一端如果是用一个按钮的点击事件的话就可以正常在右下角弹出提示框(一切正常),但是在获取数据的同时就调用弹出提示框的方法也可以正常弹出提示框(但是没有展示数据,而且在那个方法里确实是得到了数据),这个问题很是不能理解为什么自动弹出就不显示数据,点击按钮就可以显示出数据呢?),请高手进来帮帮啊~~
搜索更多相关主题的帖子: windows socket 服务器 客户端 窗体 
2010-09-19 17:33
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
得分:10 
看得出,你的弹出框中要动态的显示一些数据。
既然点击按钮会出现数据,而在获取数据之后就不能显示。你看看在接收数据的同时,调用弹出的代码与点击按钮时出现的代码是否一样……

如果可以,贴点代码啥的,恐怕别人更方便能你找错……

飘过~~
2010-09-19 18:18
zl123
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2010-8-24
得分:0 
/// <summary>
        /// 接收、解码
        /// </summary>
        private void AcceptWorkThread()
        {
            Socket socket = listener.AcceptSocket();
            byte[] buffer = new byte[1024];
            while (true)
            {
                int receiveCount = socket.Receive(buffer);
                if (receiveCount > 0)
                {
                    string recString = Encoding.UTF8.GetString(buffer, 0, receiveCount);
                    ShowMsg(recString);//调用弹出的方法
                }
                else
                {
                    socket.Close();
                    break;
                }
            }
        }
//调用的方法
public void ShowMsg(string text)
        {
            msg = text;//这个是我要用到的一个全局变量赋值
            this.showmessage();//调用弹出提示的方法

        }
//按钮的点击事件
private void button1_Click(object sender, EventArgs e)
        {
            this.showmessage();//调用弹出提示的方法
        }


//展示弹出的方法
private void showmessage()
        {
            if (!string.IsNullOrEmpty(msg))
            {
                Form2 form2 = new Form2(msg);
                AnimateWindow(form2.Handle, 1000, AW_VER_NEGATIVE | AW_ACTIVATE);
                form2.Show();
            }
        }


现在的问题是在按钮的点击事件中调用showmessage()这个方法就可以正常实现。但是在ShowMsg()这个方法中调用的时候可以弹出,但是不显示数据
2010-09-20 11:28
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
得分:0 
程序代码:
if (!string.IsNullOrEmpty(msg))
            {
                Form2 form2 = new Form2(msg);
                AnimateWindow(form2.Handle, 1000, AW_VER_NEGATIVE | AW_ACTIVATE);
                form2.Show();
            }

既然在ShowMsg中不能显示,说明你的msg是空的,也就是if (!string.IsNullOrEmpty(msg))这一句起了作用,如果不能确定,你将
程序代码:
public void ShowMsg(string text)
        {
            msg = text;//这个是我要用到的一个全局变量赋值
            this.showmessage();//调用弹出提示的方法

        }
中的参数值改成"test"试试,应该就可以了.

飘过~~
2010-09-20 12:08
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
得分:0 
或者说,你在执行AcceptWorkThread方法之后,再去点击button1看看,应该也不会再弹出来了.

飘过~~
2010-09-20 12:09
zl123
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2010-8-24
得分:0 
上面这些都是服务器端的代码,只要是客户端发送消息了,这边就会执行AcceptWorkThread这个方法,而且我一跟踪调试了,点击按钮和直接在AcceptWorkThread这个方法里调用都可以正确得到参数(msg)的值,点击按钮的时候可以显示出来,在AcceptWorkThread中直接调用就显示不出来
2010-09-20 13:26
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
得分:0 
既然都可以得到msg的值,同时不为null或者""。
就应该执行
Form2 form2 = new Form2(msg);
AnimateWindow(form2.Handle, 1000, AW_VER_NEGATIVE | AW_ACTIVATE);
form2.Show();
才对啊。
而且对话框都弹出来了,也不是其他问题,怎么可能显示不出来呢。

飘过~~
2010-09-20 14:30
zl123
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2010-8-24
得分:0 
现在问题就是出在这,确实是得到了发送过来的值,如果是不点击按钮弹出的话 就不显示数据
2010-09-20 15:54
zl123
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2010-8-24
得分:0 
实在是不知道是怎么回事~~~
2010-09-20 15:54
c1_wangyf
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:7
帖 子:665
专家分:2832
注 册:2010-5-24
得分:10 
我觉得你把问题弄得太复杂了,何不简单一点哪,把能够在一起输出的参数一起输出一下试试吧!!

如果真要分开的话,等调试通过了再分开试试吧!!

个人建议,接供参考
2010-09-20 16:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-320908-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.314675 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved