110,545
社区成员
发帖
与我相关
我的任务
分享
System.Timers.Timer time = new System.Timers.Timer(60000);//定时器
private void ContentServer(object source, System.Timers.ElapsedEventArgs e)
{
try
{
//定义一个套字节监听 包含3个参数(IP4寻址协议,流式连接,TCP协议)
socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//获取文本框输入的服务端IP和Port
IPAddress serverIPAddress = IPAddress.Parse(txtIP.Text.Trim());
int serverPort = int.Parse(txtPort.Text.Trim());
IPEndPoint endpoint = new IPEndPoint(serverIPAddress, serverPort);
//向指定的ip和端口号的服务端发送连接请求 用的方法是Connect 不是Bind
socketClient.Connect(endpoint);
//创建一个新线程 用于监听服务端发来的信息
threadClient = new Thread(RecMsg);
//将窗体线程设置为与后台同步
threadClient.IsBackground = true;
//启动线程
threadClient.Start();
txtMsg.AppendText("已与服务端建立连接,可以开始通信...\r\n");
time.Enabled = false;
time.Stop();
//btnConnectToServer.Enabled = false;
}
catch (Exception)
{
txtMsg.AppendText("服务端已经断开连接,请等待...\r\n");
}
}
/// <summary>
/// 接受服务端发来信息的方法
/// </summary>
string strRecMsg;
//定义一个委托
delegate void Advice(string ss);
private void RecMsg()
{
strRecMsg = null;
while (true) //持续监听服务端发来的消息
{
strRecMsg = null;
int length = 0;
byte[] buffer = new byte[SendBufferSize];
try
{
//将客户端套接字接收到的字节数组存入内存缓冲区, 并获取其长度
length = socketClient.Receive(buffer);
}
catch (SocketException ex)
{
txtMsg.AppendText("套接字异常消息:" + ex.Message + "\r\n");
txtMsg.AppendText("服务端已断开连接\r\n");
//启用定时监听
time.Elapsed += new System.Timers.ElapsedEventHandler(ContentServer);
time.AutoReset = true ;
time.Enabled = true;
break;
}