📄 imessagesender.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace mychat1
{
public interface IMessageSender
{
public event MessageReceivedEventHandler MessageReceived;
bool Connect(IPAddress ip, int port); // 连接到服务端
bool SendMessage(Message msg); // 发送用户
void SignOut(); // 注销系统
}
public class MessageSender : IMessageSender
{
public event MessageReceivedEventHandler MessageReceived;
TcpClient client;
public Stream streamToServer;
// 连接至远程
public bool Connect(IPAddress ip, int port)
{
try
{
client = new TcpClient();
client.Connect(ip, port);
streamToServer = client.GetStream();
return true;// 获取连接至远程的流
}
catch
{
return false;
}
byte[] buffer = new byte[1024];
while (true)
{
try
{
int bytesRead =streamToServer.Read(buffer, 0, 1024);
if (bytesRead == 0)
{
throw new Exception("客户端已断开连接");
}
string msg = Encoding.Unicode.GetString(buffer, 0, bytesRead);
if (MessageReceived != null)
{
MessageReceived(msg); // 已经收到消息
}
}
catch (Exception ex)
{
if (ClientLost != null)
{
ClientLost(ex.Message); // 客户连接丢失
break; // 退出循环
}
}
}
}
// 发送消息
public bool SendMessage(string msg)
{
try
{
lock (streamToServer)
{
byte[] buffer = Encoding.Unicode.GetBytes(msg);
streamToServer.Write(buffer, 0, buffer.Length);
return true;
}
}
catch
{
return false;
}
}
// 注销
public void SignOut()
{
if (streamToServer != null)
streamToServer.Dispose();
if (client != null)
client.Close();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -