急急急!C#socket 编程,如何实现当客户端发来消息时,有提示音?就像qq一样!有劳大神了!
我知道调用Consol.Beep()函数,但是,这个函数 该放在哪里呢 ?代码如下:namespace TCPServer
{
public partial class frmSyncTcpServer : Form
{
#region 变量
// 申明变量
private const int Port = 9000;
private TcpListener tcpLister = null;
private TcpClient tcpClient = null;
IPAddress ipaddress;
private NetworkStream networkStream = null;
private BinaryReader reader;
private BinaryWriter writer;
// 申明委托
// 显示消息
private delegate void ShowMessage(string str);
private ShowMessage showMessageCallback;
// 显示状态
private delegate void ShowStatus(string str);
private ShowStatus showStatusCallBack;
// 清空消息
private delegate void ResetMessage();
private ResetMessage resetMessageCallBack;
public class BeepUp //新建一个类
{
System.Runtime.InteropServices;
public static extern bool Beep(int frequency, int duration);
}
#endregion
public frmSyncTcpServer()
{
InitializeComponent();
#region 实例化委托
// 显示消息
showMessageCallback = new ShowMessage(showMessage);
// 显示状态
showStatusCallBack = new ShowStatus(showStatus);
// 重置消息
resetMessageCallBack = new ResetMessage(resetMessage);
#endregion
ipaddress = IPAddress.Loopback;
tbxserverIp.Text = ipaddress.ToString();
tbxPort.Text = Port.ToString();
}
#region 定义回调函数
// 显示消息
private void showMessage(string str)
{
lstbxMessageView.Items.Add(tcpClient.Client.RemoteEndPoint);
lstbxMessageView.Items.Add(str);
lstbxMessageView.TopIndex = lstbxMessageView.Items.Count - 1;
}
// 显示状态
private void showStatus(string str)
{
toolStripStatusInfo.Text = str;
}
// 清空消息
private void resetMessage()
{
tbxMessage.Text = string.Empty;
tbxMessage.Focus();
}
#endregion
#region Click事件
// 开始监听
private void btnStart_Click(object sender, EventArgs e)
{
tcpLister = new TcpListener(ipaddress,Port);
tcpLister.Start();
// 启动一个线程来接受请求
Thread acceptThread =new Thread(acceptClientConnect);
BeepUp.Beep(500, 700);
acceptThread.Start();
}
// 接受请求
private void acceptClientConnect()
{
statusStripInfo.Invoke(showStatusCallBack,"正在监听");
Thread.Sleep(1000);
try
{
statusStripInfo.Invoke(showStatusCallBack,"等待连接");
tcpClient = tcpLister.AcceptTcpClient();
if (tcpLister != null)
{
Console.Beep();
statusStripInfo.Invoke(showStatusCallBack,"接受到连接");
networkStream = tcpClient.GetStream();
reader = new BinaryReader(networkStream);
writer = new BinaryWriter(networkStream);
}
}
catch
{
statusStripInfo.Invoke(showStatusCallBack, "停止监听");
Thread.Sleep(1000);
statusStripInfo.Invoke(showStatusCallBack, "就绪");
}
}
// 关闭监听
private void btnStop_Click(object sender, EventArgs e)
{
if (MessageBox.Show("\n停止监听?", "Confirm Message", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
tcpLister.Stop();
}
}
// 清空消息
private void btnClear_Click(object sender, EventArgs e)
{
if (MessageBox.Show("\n是否清空聊天记录?", "Confirm Message", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
lstbxMessageView.Items.Clear();
}
}
// 接受消息
private void btnReceive_Click(object sender, EventArgs e)
{
statusStripInfo.Invoke(showStatusCallBack, "接受消息中");
try
{
string receivemessage = reader.ReadString();
lstbxMessageView.Invoke(showMessageCallback, receivemessage);
}
catch
{
if (reader != null)
{
reader.Close();
}
if (writer != null)
{
writer.Close();
}
if (tcpClient != null)
{
tcpClient.Close();
}
statusStripInfo.Invoke(showStatusCallBack, "断开了连接");
// 重新开启一个线程等待新的连接
Thread acceptThread = new Thread(acceptClientConnect);
acceptThread.Start();
}
}
// 发送消息
private void btnSend_Click(object sender, EventArgs e)
{
Thread sendThread = new Thread(SendMessage);
sendThread.Start(tbxMessage.Text);
}
// 发送消息
private void SendMessage(object state)
{
statusStripInfo.Invoke(showStatusCallBack, "正在发送");
try
{
writer.Write(state.ToString());
Thread.Sleep(5000);
writer.Flush();
statusStripInfo.Invoke(showStatusCallBack, "完毕");
tbxMessage.Invoke(resetMessageCallBack, null);
lstbxMessageView.Invoke(showMessageCallback, state.ToString());
}
catch
{
if (reader != null)
{
reader.Close();
}
if (writer != null)
{
writer.Close();
}
if (tcpClient != null)
{
tcpClient.Close();
}
statusStripInfo.Invoke(showStatusCallBack, "断开了连接");
// 重新开启一个线程等待新的连接
Thread acceptThread = new Thread(acceptClientConnect);
acceptThread.Start();
}
}
private void button1_Click(object sender, EventArgs e)
{
if (reader != null)
{
reader.Close();
}
if (writer != null)
{
writer.Close();
}
if (tcpClient != null)
{
// 断开连接
tcpClient.Close();
}
toolStripStatusInfo.Text = "断开连接";
// 启动一个线程等待接受新的请求
Thread acceptThread = new Thread(acceptClientConnect);
acceptThread.Start();
}
#endregion
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
if (MessageBox.Show("\n你确定退出?", "Confirm Message", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
this.Close();
}
private void button1_Click_1(object sender, EventArgs e)
{
if (MessageBox.Show("\n你确定退出?", "Confirm Message", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
this.Close();
}
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show("本程序采用Tcp协议!");
}
}
}
C# --------------------编程问答-------------------- 最简单的
System.Media.SystemSounds.Beep.Play();
System.Media.SystemSounds.Asterisk.Play();
System.Media.SystemSounds.Exclamation.Play(); --------------------编程问答-------------------- 在客户端接受到消息成功的时候调用播放音乐的win32api --------------------编程问答-------------------- 也可以用SoundPlayer播放任意声音
http://www.cnblogs.com/buzaixian/archive/2009/09/19/1570116.html --------------------编程问答-------------------- 我的意思是说:在点击”接受“按钮前先发出提示声音!该怎么办呢?我现在的情况是:在点击接受按钮时才发出声音...
求帮忙!谢谢 --------------------编程问答-------------------- 用VB做过 C#的倒是没用过。 --------------------编程问答--------------------
一个笨办法 在服务器上放个timer控件 定时调用
// 接受请求
private void acceptClientConnect()
这个就行
补充:.NET技术 , C#