解决方案 »
- vs2008调试时,跳转到下一个断点的快捷键失灵了
- DevExpress.XtraVerticalGrid.vGridControl控件取值问题
- 求一个比较好的datagridview
- 调用自制DLL中的GetPrivateProfileString()说找不到指定的内容。。
- 关于C#的一个小问题
- C#如何访问局域网内另一台计算机的数据库?
- 请帮忙看一下为什么赋值总是出错?
- 怎么样对winform的listview控件上的数据进行添加、删除、修改操作!希望大家帮帮忙,谢谢大家!
- sos,求救!!!---找不到类型或命名空间。。。
- ===急!!!如何用C#实现两台机子的文件copy?
- SqlHelper调用存储过程返回值
- c#权限控制
你btnLogin_Click事件里面,启动了线程thread,方法ServerResponse()
ServerResponse()
里面有一句
if (!Stream.CanRead)
{
return;
}
stream此时在干嘛?在btnLogin_Click事件中,启动完线程后,同时开始往stream里写数据了!会不会是因为此时主线程正在写stream,ServerResponse()里的if判断直接return了呢?
建立楼主把btnLogin_Click事件,启动线程后的stream写东西,放到ServerResponse()里试试
Thread thread = new Thread(new ThreadStart(this.StartSocketListen)); thread.Start();
这里肯定有问题,怎么能实时监听用户的接入???
正确的方法应该是使用异步回调
下面是我曾经写的一个服务器里面的代码,你参考一下:
/// <summary>
/// 启动服务
/// </summary>
/// <returns></returns>
public void Start()
{
try
{
this._accountManager = new AccountManager();
if (this._accountManager.Load())
{
IPEndPoint endPoin = new IPEndPoint(IPAddress.Any, 3568);
this.Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
this.Listener.Bind(endPoin);
this.Listener.Listen(256);
this.Listener.BeginAccept(new AsyncCallback(Accept), this.Listener);
}
else
{
System.Windows.Forms.MessageBox.Show("原因:未能加载账户列表。", "启动服务失败!", System.Windows.Forms.MessageBoxButtons.OK);
return;
}
}
catch (Exception ex) { }
} /// <summary>
/// 请求连接进入
/// </summary>
/// <param name="ar"></param>
private void Accept(IAsyncResult ar)
{
try
{
if (this.Listener != null)
{
Connection conn = new Connection(this, Listener.EndAccept(ar));
this._Connections.Add(conn);
//继续监听
this.Listener.BeginAccept(new AsyncCallback(Accept), this.Listener);
}
}
catch (Exception ex) { }
}
Thread thread = new Thread(new ThreadStart(this.StartSocketListen)); thread.Start();
这里肯定有问题,怎么能实时监听用户的接入???
【这两句代码是完全没有问题的,我实现的多线程应该是同步的(有请求就创建一个线程,退出则销毁一个进程!),而你做的是异步的功能!对于异步的实现方法我也该了解下!有时间要好好跟你讨论讨论~】