常用TCP连接
以下demo为开发中常用的tcp连接方式,服务端不需要启动,实时监听客户端是否有数据传输,如果有会多线程监测叫号,而客户端只需要把叫号信息包装进流,tcp方式传输即可
DEMO:1、服务端代码如下:
public partial class ShortServerForm : Form
{
public ShortServerForm()
{
InitializeComponent();
}
private Thread rdthread = null;//定义接收数据的线程
private TcpListener tcplistener = null;//通过tcpIP进行数据的接收
private SpVoice voice = new SpeechLib.SpVoice();
private void ShortServerForm_Load(object sender, EventArgs e)
{
try
{
//建立并启动多线程
rdthread = new Thread(new ThreadStart(RD));
rdthread.IsBackground = true;
rdthread.Start();
//tcp端口
tcplistener = new TcpListener(IPAddress.Any, 8800);
//启动
tcplistener.Start();
}
catch (Exception ex)
{
tcplistener.Stop();
}
}
private void RD()
{
while (true)
{
try
{
//接收tcp协议
using(TcpClient tc = tcplistener.AcceptTcpClient())
{
//声明连接网络流
using(NetworkStream ns = tc.GetStream())
{
//设定字节接收
byte[] buffer = new byte[102400];
//读取固定长度的流文件
ns.Read(buffer, 0, buffer.Length);
//防止乱码 输出信息
string r = Encoding.Default.GetString(buffer);
//语音叫号
voice.Speak(r, SpeechVoiceSpeakFlags.SVSFDefault);
}
}
}
catch (Exception ex)
{
MessageBox.Show("艾玛,报错了,快检查检查,用客户端请求下看看" + ex.Message);
}
}
}
}
2、客户端:
输入叫号的内容,即可请求,请求代码如下:
/// <summary>
/// 设置默认请求本地IP 8800端口
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnQQ_Click(object sender, EventArgs e)
{
try
{
TcpClient tcpClient = new TcpClient();
//使用tcpclient.Connect()方法,程序会等待该方法执行结束后才会继续执行下面的程序段,并且没有超时时间可设置,这样会大大影响程序执行的效率和时间。
//BeginConnect效率高
var result = tcpClient.BeginConnect("127.0.0.1",8800,null,null);
//实现过程就是获取用于等待异步操作完成的WaitHandle,阻止当前线程,直到当前实例收到信号,同时使用TimeSpan指定时间间隔
var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromMilliseconds(500));
if (!success) return;
//结束连接
tcpClient.EndConnect(result);
//请求信息写入流文件发送 声明
NetworkStream ntwstream = tcpClient.GetStream();
if (ntwstream.CanWrite)
{
//固定字节无乱码写入流
Byte[] bytesend = Encoding.Default.GetBytes(txtMES.Text.Trim());
ntwstream.Write(bytesend, 0, bytesend.Length);
}
else
{
//注意关闭各种流文件
ntwstream.Close();
tcpClient.Close();
return;
}
}
catch (Exception ex)
{
}
}
此方法为短连接形式,不会过多的占用资源,开发过程安全。